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

Python 1.Възможностите за внедряване на динамичен GUI в библиотеките Tix на библиотеката: ScrolledWindow и NoteBook

Към главния За символа

Едно от предимствата на динамичния програмен език 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.

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

Към главния За символа