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

Python 1.Die dynamischen GUI-Implementierungsfunktionen auf den Tix-Bibliotheks-Widgets: ScrolledWindow und NoteBook

Zu den wichtigsten Über das Symbol

Einer der Vorteile der dynamischen Programmiersprache Python ist die Möglichkeit, zur Laufzeit eine grafische Benutzeroberfläche (GUI) dynamisch zu erstellen. Eingebaute Bibliothek Tkinter ermöglicht es Ihnen, eine Vielzahl von grafischen Elementen für die Kontrolle, Eingabe und Ausgabe von Informationen zu erstellen, zu platzieren und zu verschieben - Widgets. Allerdings hat die Tkinter-Bibliothek ein Feature, wenn die Anzahl der Widgets größer wird als erlaubt, das Fenster mit den maximalen Größen für Ihren Monitorbildschirm anzuzeigen, dann gibt es ein Problem des Zugriffs auf den versteckten Bereich des Fensters.

Die Erweiterung der eingebauten Bibliothek Tkinter, die Tix (Tk Interface Extension) -Bibliothek kann dieses Problem mit Hilfe des ScrolledWindow-Widgets lösen - ein Fenster mit Scrollbars. Das zweite nützliche Widget, das mit der Tix-Bibliothek kommt, ist das Registerfenster - NoteBook.

Allerdings hat die Verwendung dieser Widgets in Fenster-Anwendungen in Python seine eigenen Besonderheiten der Anzeige von Informationen in dem Fall, dass interne Widgets nicht in die zugeordnete Fenstergröße passen. In diesem Artikel werden wir diese Features bei der Organisation einer dynamischen GUI betrachten:
Das erste Beispiel ist, das ScrolledWindow-Widget im Hauptanwendungsfenster zu platzieren, und damit werden alle anderen Widgets automatisch in sie gelegt.
Das zweite Beispiel ist, die ScrolledWindow-Widgets nur in den Tabs des NoteBook-Widgets zu platzieren.

Die hier vorgestellten Beispiele sind in Python 2.7 und dem Linux-Betriebssystem implementiert: Ubuntu 16.04LTS. Ich hoffe, dass die Implementierung dieser Beispiele in Ihrer Version von Python und dem Betriebssystem keine Komplexität für Sie darstellen wird.


Beispiel Nr.1 - ScrolledWindow-Widget als Hauptcontainer der gesamten Applikation.

#!/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()

Das Ergebnis des Szenarios Nr.1 ist in den folgenden drei Figuren zu sehen:


Figur 1

Die erste Ansicht der Anwendung Nr. 1 nach dem Start. Es ist ein sichtbares automatisches Auftreten von Bildlaufleisten von rechts und unten im Hauptfenster sichtbar. Da die Gesamtgröße des NoteBook-Widgets größer ist als das ursprüngliche Root-Fenster (800x600) wegen der Anzahl der im ersten Zyklus angegebenen Tabs und der Anzahl der in den nächsten beiden Zyklen angegebenen Labels. Diese Zahl zeigt, dass von den angegebenen 20 Registerkarten nur 15 im Hauptfenster platziert wurden und nur 31 der 39 Etiketten, die in der ersten Registerkarte angegeben sind, befinden.


Figur 2

Die zweite Registerkarte im Ausgangszustand zeigt nur 16 Etiketten von 28 an. Die Position der Bildlaufleisten bleibt unverändert.


Figur 3

Wenn Sie die untere Bildlaufleiste nach rechts verschieben, können Sie sehen, dass das Hauptfenster nicht nur alle Registerkarten des NoteBook-Widgets enthält, sondern auch alle Tags, die in der zweiten Registerkarte platziert sind.


Beispiel Nr.2 - Das ScrolledWindow-Widget befindet sich in jeder Registerkarte des NoteBook-Widgets.

#!/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()

Das Ergebnis des Szenarios Nr. 2 ist in den folgenden drei Figuren zu sehen:


Figur 4

Die erste Ansicht der Anwendung Nr. 2 nach dem Start. Die Bildlaufleiste erschien nur rechts im Tab1 Tab, da die Anzahl der vertikalen Markierungen größer ist als die Originalgrößen des Hauptfensters.


Figur 5

Die zweite Registerkarte zeigt nur die untere Bildlaufleiste an, da auf dieser Registerkarte die Etiketten horizontal positioniert sind.


Figur 6

Wenn du die Bildlaufleiste nach rechts verschiebst, kannst du alle Etiketten bis zum Ende des Fensters sehen, aber du kannst nicht auf Tabs mit Zahlen größer als 15 zugreifen. So können in der Variante Nr. 2 die Bildlaufleisten nur innerhalb der Registerkarte Zugriff gewähren. Wenn die Anzahl der Registerkarten größer ist als das, was in der horizontalen Größe des Hauptfensters platziert wird, gibt es keinen Zugriff auf sie.

Wenn also die Anzahl der Registerkarten des NoteBook-Widgets nicht zu groß ist, um die Anzeigegrenzen des Hauptfensters zu überschreiten, dann ist die betrachtete Variante des Ortes des ScrolledWindow-Widgets recht akzeptabel.

Der Versuch, beide Varianten zu vereinheitlichen, hat das gleiche Ergebnis wie Beispiel Nr. 1 ergeben, da das Widget-Fenster von ScrolledWindow auf die maximalen Größen erweitert wird, die von Objekten belegt sind.

Ich hoffe, dass diese Beispiele Ihnen bei der Gestaltung Ihrer Fensteranwendungen in Python helfen werden.

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

Zu den wichtigsten Über das Symbol