Едно от предимствата на динамичния програмен език Python е способността за динамично създаване на графичен потребителски интерфейс (GUI) по време на изпълнение.
Вградена библиотека Tkinter ви позволява да създавате, поставяте и премествате различни графични елементи за управление, входна и изходна информация - приспособления.
Въпреки това, библиотеката на Tkinter има една функция, ако броят на джаджите стане по-голям, отколкото позволява да се покаже прозорецът с максималните размери, налични за монитора ви, тогава има проблем с достъпа до скритата област на прозореца.
Разширението на вградената библиотека Tkinter, библиотеката Tix (Tk Interface Extension), може да реши този проблем с помощта на приставката ScrolledWindow - прозорец с превъртащи ленти.
Втората полезна джаджа, която се доставя с библиотеката Tix, е прозореца с табове - NoteBook.
Използването на тези приспособления в прозорци в Python обаче има свои особености при показването на информация в случай, че вътрешните джаджи не се вписват в зададения размер на прозореца.
В тази статия ще разгледаме тези функции, когато организираме динамичен GUI:
Първият пример е да поставите приспособлението "ScrolledWindow" в главния прозорец на приложението и по този начин всички останали джаджи ще бъдат автоматично поставени в него.
Вторият пример е да поставите приспособленията ScrolledWindow само в разделите на джаджа на NoteBook.
Примерите, представени тук, се изпълняват в Python 2.7 и в операционната система Linux: Ubuntu 16.04LTS.
Надявам се, че прилагането на тези примери във вашата версия на Python и операционната система няма да ви представят сложност.
Пример №1 - Устройство ScrolledWindow като основен контейнер на цялото приложение.
#!/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()
Резултатът от сценарий № 1 може да се види в следните три цифри:
Фигура 1
Първият изглед на заявка № 1 след стартирането.
Вижда се автоматично появяване на ленти за превъртане отдясно и в долната част на главния прозорец.
Тъй като общият размер, заеман от приспособлението за Notebook, е по-голям от първоначалния корен прозорец (800x600), поради броя на разделите, зададени в първия цикъл, и броя на етикетите, посочени в следващите два цикъла.
Тази фигура показва, че от посочените 20 раздели, само 15 са поставени в главния прозорец и са разположени само 31 от 39 етикета, посочени в първия раздел.
Фигура 2
Вторият раздел в началното състояние показва само 16 етикета от 28.
Позицията на лентите за превъртане остава непроменена.
Фигура 3
При преместването на долната лента за превъртане надясно можете да видите, че главният прозорец обхваща не само всички раздели на джаджа на NoteBook, но и всички маркери, поставени във втория раздел.
Пример №2 - Устройството ScrolledWindow се намира във всеки раздел на приспособлението за NoteBook.
#!/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()
Резултатът от сценарий №2 може да се види в следните три фигури:
Фигура 4
Първият изглед на заявлението №2 след старта.
Лентата за превъртане се появи само вдясно в раздела Tab1, тъй като броят на вертикалните марки е по-голям от оригиналните размери на главния прозорец.
Фигура 5
Вторият раздел показва само долната лента за превъртане, тъй като в този раздел етикетите са разположени хоризонтално.
Фигура 6
При преместването на лентата за превъртане надясно можете да видите всички етикети до края на прозореца, но нямате достъп до раздели с номера по-големи от 15.
По този начин във вариант № 2 лентите за превъртане осигуряват достъп само в рамките на раздела.
Ако броят на разделите е по-голям от този, който се намира в хоризонталния размер на главния прозорец, няма да има достъп до тях.
Следователно, ако броят на раздели в приспособлението за NoteBook не е прекалено голям, за да надхвърли границите на дисплея на главния прозорец, тогава разглежданият вариант на местоположението на приспособлението ScrolledWindow е напълно приемлив.
Опитът да се обединят и двата варианта е дал същия резултат като Пример №1, защото прозорецът на приспособлението на ScrolledWindow се разширява до максималните размери, заети от обектите, поставени в него.
Надявам се, че тези примери ще ви помогнат при проектирането на приложенията ви за прозорци в Python.