Unul dintre avantajele limbajului de programare dinamic Python este capacitatea de a crea în mod dinamic o interfață grafică (GUI) în timpul rulării.
Built-in bibliotecă Tkinter vă permite să creați, să plasați și să mutați o varietate de elemente grafice pentru controlul, informațiile de intrare și ieșire - widget-uri.
Cu toate acestea, biblioteca Tkinter are o caracteristică, în cazul în care numărul de widget-uri devine mai mare decât permite afișarea ferestrei cu dimensiunile maxime disponibile pentru ecranul monitorului, atunci există o problemă de accesare a zonei ascunse a ferestrei.
Extensia bibliotecii încorporate Tkinter, biblioteca Tix (Tk Interface Extension) poate rezolva această problemă cu ajutorul widget-ului ScrolledWindow - o fereastră cu bare de derulare.
Al doilea widget util care vine cu biblioteca Tix este fereastra cu tab-uri - NoteBook.
Cu toate acestea, utilizarea acestor widget-uri în aplicațiile ferestre în Python are particularitățile sale de a afișa informații în cazul în care widget-urile interne nu se încadrează în dimensiunea ferestrei atribuite.
În acest articol, vom examina aceste caracteristici atunci când organizăm un GUI dinamic:
Primul exemplu este să plasați widgetul ScrolledWindow în fereastra principală a aplicației și, astfel, toate celelalte widgeturi vor fi plasate automat în el.
Cel de-al doilea exemplu este plasarea widget-urilor ScrolledWindow numai în filele widgetului NoteBook.
Exemplele prezentate aici sunt implementate în Python 2.7 și sistemul de operare Linux: Ubuntu 16.04LTS.
Sper că implementarea acestor exemple în versiunea dvs. de Python și sistemul de operare nu va prezenta nici o complexitate pentru dvs.
Exemplu nr.1 - Widgetul ScrolledWindow ca container principal al întregii aplicații.
#!/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()
Rezultatul scenariului nr.1 poate fi văzut în următoarele trei cifre:
Figura 1
Vederea inițială a cererii nr. 1 după lansare.
Se observă apariția automată a barelor de derulare din dreapta și din partea inferioară a ferestrei principale.
Deoarece dimensiunea totală ocupată de widgetul NoteBook este mai mare decât fereastra root (800x600) originală din cauza numărului de file specificate în primul ciclu și a numărului de etichete specificate în următoarele două cicluri.
Această figură arată că din cele 20 de filete specificate, numai 15 au fost plasate în fereastra principală și sunt localizate numai 31 din cele 39 de etichete specificate în prima filă.
Figura 2
A doua filă în starea inițială arată doar 16 etichete din 28.
Poziția barelor de defilare rămâne neschimbată.
Figura 3
Deplasând bara de jos de jos spre dreapta, puteți vedea că fereastra principală acoperă nu numai toate filele widgetului NoteBook, ci și toate etichetele plasate în cea de-a doua filă.
Exemplu nr. 2 - widgetul ScrolledWindow este localizat în fiecare filă a widgetului 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()
Rezultatul scenariului nr. 2 poate fi văzut în următoarele trei cifre:
Figura 4
Vederea inițială a cererii nr. 2 după lansare.
Bara de derulare a apărut numai în partea dreaptă în fila Tab1, deoarece numărul de mărci verticale este mai mare decât dimensiunile originale ale ferestrei principale.
Figura 5
A doua fila afișează numai bara de jos, deoarece în această filă etichetele sunt poziționate orizontal.
Figura 6
Mutarea barei de parcurgere spre dreapta, puteți vedea toate etichetele până la sfârșitul ferestrei, dar nu puteți accesa file cu numere mai mari de 15.
Astfel, în varianta nr. 2, barele de derulare oferă acces numai în cadrul filei.
Dacă numărul de file este mai mare decât cel plasat în dimensiunea orizontală a ferestrei principale, atunci nu va mai fi acces la ele.
Prin urmare, dacă numărul de file din widget-ul NoteBook nu este prea mare pentru a depăși limitele de afișare ale ferestrei principale, atunci varianta considerată a locației widget-ului ScrolledWindow este destul de acceptabilă.
Încercarea de a unifica ambele variante a dat același rezultat ca Exemplul nr. 1, deoarece fereastra widget a ScrolledWindow se extinde la dimensiunile maxime ocupate de obiectele plasate în ea.
Sper că aceste exemple vă vor ajuta să vă proiectați aplicațiile de ferestre în Python.