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.