uk ru en pl cs sk bg de fr es it ro tr ar id ja zh

Python 1. A dinamikus grafikus felhasználói felület a Tix könyvtárblokkokban: ScrolledWindow és NoteBook

A fő A szimbólumról

A dinamikus programozási nyelv egyik előnye a Python a grafikus felhasználói felület (GUI) dinamikus létrehozása a futásidőben. Beépített könyvtár A Tkinter lehetővé teszi a grafikus elemek létrehozását, elhelyezését és mozgatását a vezérlő, bemeneti és kimeneti információk - kütyüinek. A Tkinter könyvtárnak azonban van egy funkciója, ha a widgetek száma nagyobb lesz, mint a képernyő maximális képernyőméretének megjelenítéséhez, akkor probléma az ablak rejtett területének eléréséhez.

A beépített könyvtár Tkinter, a Tix (Tk Interface Extension) könyvtár kiterjesztése megoldhatja ezt a problémát a ScrolledWindow widget segítségével - egy ablak a görgetősávokkal. A második hasznos widget, amely a Tix könyvtárhoz tartozik, a laposablak - Notebook.

Azonban ezeknek a widgeteknek a használata ablakos alkalmazásokban a Python-ban saját sajátosságai vannak az információ megjelenítésével abban az esetben, ha a belső widget nem illeszkedik a kijelölt ablakméretbe. Ebben a cikkben ezeket a funkciókat a dinamikus GUI szervezése során tekinthetjük meg:
Az első példa a ScrolledWindow widget elhelyezése az alkalmazás főablakában, így minden más widget automatikusan beillesztésre kerül.
A második példa az, hogy a ScrolledWindow widgeteket csak a NoteBook widget fülein helyezheti el.

Az itt bemutatott példák a Python 2.7 és a Linux operációs rendszer: Ubuntu 16.04LTS. Remélem, hogy ezeknek a példáknak a végrehajtása a Python verziójába és az operációs rendszerbe nem jelent bonyolultságot az Ön számára.


1. példa - A ScrolledWindow widget, mint a teljes alkalmazás fő tárolója.

#!/usr/bin/python

import Tix as tx

root=tx.Tk()
root.geometry("800x600+0+10")

swr=tx.ScrolledWindow(root)
swr.pack(fill=tx.BOTH, expand=1)

nb=tx.NoteBook(swr.window)
nb.pack(fill=tx.BOTH, expand=1)

for i in range(1,21):
	nb.add("tab"+str(i),label="Tab "+str(i))

for k in range(1,39):
	l=tx.Label(nb.tab1,text="label "+str(k))
	l.pack()

for k in range(1,29):
	l=tx.Label(nb.tab2,text="label "+str(k))
	l.pack(side=tx.LEFT)

root.mainloop()

Az 1. szcenárió eredménye a következő három számon látható:


Ábra 1

A bevezetés megkezdése után az 1. számú alkalmazás kezdeti nézete. A gördítő sávok automatikus megjelenése látható a jobb oldalon és a főablak alján. Mivel a NoteBook widget által elfoglalt teljes méret nagyobb, mint az eredeti gyökér ablak (800x600), mivel az első ciklusban meghatározott lapok száma és a következő két ciklusban megadott címkék száma. Ez a szám azt mutatja, hogy a megadott 20 fül közül csak 15 került a főablakba, és az első fülön meghatározott 39 címke közül csak 31 található.


Ábra 2

A kezdeti állapotban lévő második lap mindössze 16 címkét jelenít meg a 28-ból. A görgetősávok helyzete változatlan marad.


Ábra 3

Az alsó görgetősáv jobbra történő mozgatásával láthatjuk, hogy a főablak nem csak a NoteBook widget összes lapját, hanem a második lapon elhelyezett összes címkét is lefedi.


2. példa - A ScrolledWindow widget a NoteBook widget mindegyik lapján belül található.

#!/usr/bin/python

import Tix as tx

root=tx.Tk()
root.geometry("800x600+0+10")

swm = []

nb=tx.NoteBook(root)
nb.pack(fill=tx.BOTH, expand=1)

for i in range(1,21):
	nb.add("tab"+str(i),label="Tab "+str(i))
	sw=tx.ScrolledWindow(eval("nb.tab"+str(i)))
	swm.append(sw)
	sw.pack(fill=tx.BOTH, expand=1)

for k in range(1,39):
	l=tx.Label(swm[0].window,text="label "+str(k))
	l.pack()

for k in range(1,29):
	l=tx.Label(swm[1].window,text="label "+str(k))
	l.pack(side=tx.LEFT)

root.mainloop()

A 2. forgatókönyv eredményét a következő három szám mutatja be:


Ábra 4

A 2. sz. Alkalmazás kezdeti nézete a bevezetés után. A görgetősáv csak a jobb oldalon látható a Tab1 lapon, mivel a függőleges jelek száma nagyobb, mint a főablak eredeti méretei.


Ábra 5

A második lap csak az alsó görgetősávot jeleníti meg, mivel ebben a fülben a címkék vízszintesen vannak elhelyezve.


Ábra 6

Ha a görgetősávot jobbra mozgatja, akkor az összes címke látható az ablak végére, de nem érheti el a 15-nél nagyobb számmal rendelkező lapokat. Így a 2. változatban a görgetősávok csak a fülön belüli hozzáférést biztosítanak. Ha a fülek száma nagyobb, mint a főablak vízszintes mérete, akkor ezeknek nincs hozzáférése.

Ezért ha a NoteBook widget fülei száma nem túl nagy ahhoz, hogy meghaladja a főablak megjelenítési korlátait, akkor a ScrolledWindow widget helyének megfontolt változata meglehetősen elfogadható.

A két változat egyesítési kísérlete ugyanazt az eredményt eredményezte, mint az 1. példában, mivel a ScrolledWindow widget ablaka a benne lévő objektumok által elfoglalt maximális méretre bővül.

Remélem, hogy ezek a példák segítenek Önnek az ablak alkalmazásainak Pythonban történő tervezésében.

Oleksii Tolkachov (ORCID ID: 0000-0002-4835-0507), Kiev, 30.08.2017.

A fő A szimbólumról