Mein GUI Designer bietet die Funktionalitäten, wofür er gedacht ist, nämlich als GUI Designer für tkinter aber noch nicht für ttk.
Das Widget Canvas kann man zwar positionieren und die Größe bestimmen. Linien oder Polygone zeichnen gehört allerdings nicht zum Umfang meines GUI Designers. Das soll man selber programmieren. Ein Canvas Zusatzmodul wäre allerdings denkbar.
Dafür bietet mein GUI Designer als einziger ein Grid Konzept, wie es das nirgendwo anders gibt. Und das ist etwas, was man sich unbedingt ansehen sollte.
Worum es aber jetzt geht, ist die Frage, wie diverse User Interfaces aussehen sollen.
Im Augenblick ist es so, dass die UI Files (File Extension egal) gleich die GUI inklusive der Widgets aufbauen – und die UI Files auch gleich Programmcode beinhalten können.
Und man hat dann Zugriff auf die Widgets durch eine Zugriffsfunktion. Im Augenblick ist diese auf einen Container beschränkt, aber das läßt sich erweitern.
Was aber gewünscht wird, ist die Verwendung eigener Klassen.
Die Frage ist nun, wie soll man das machen?
Bei Pygubu finden wir folgendes: https://pypi.python.org/pypi/pygubu
Code: Alles auswählen
import pygubuWas wir dann noch finden, ist einerseits gut, aber andererseits auch schlecht:
Code: Alles auswählen
#1: Create a builder
self.builder = builder = pugubu.Builder()Schlecht ist, dass das UI File fest mit einem self verknüpft ist, denn man braucht es ja nur kurzzeitig zur Initialisierung der Widgets und kann es vermutlich nach __init__ einfach vergessen.
Allerdings wenn der Builder eigene Klassen beinhaltet, würde man ihn während der ganzen Lebenszeit des Objektes brauchen.
Meine Meinung dazu ist, dass tkinter widgets vom Builder erzeugt werden sollen oder User Klassen initialisiert werden sollen. Und dass der Builder daher nach der Erzeugung überflüssig werden sollte.
Kommen wir zum nächsten TeiL:
Code: Alles auswählen
#2: Load an ui file
builder.add_from_file('test.ui')Danach wird das widget erzeugt:
Code: Alles auswählen
#3: Create the widget using a master as parent
self.mainwindow = builder.get_object('mainwindow', master)Der User könnte ja auch eigene Klassen verwenden wollen und ist dann mit einem tkinter Widget nicht zufrieden. Daher ist dann auch die folgende Art der Widget Erzeugung anzubieten:
Code: Alles auswählen
self.myButton = MyButtonClass(parent)
builder.set_object(self.myButton,'myBuilderButton')