War abens weg und konnte nicht eher antworten. Eines ist schon mal schon mal sicher, es kann nicht sein, dass das Projekt einmal nicht mehr gewartet wird. Denn im Unterschied zu anderen GUI Designern ist dieser in Python programmiert. Kann jeder verändern und anpassen, wenn er will. Trennung GUI und Code wird erreicht durch unabhängige GUI und Zugriff.
Den Zugriff wollen wir mal ein wenig verfeinern. Das alles anzugeben ist doch nicht so gut:
Code: Alles auswählen
myX_Spinbox = gui.get_widget("//CreateAndLayout/LayoutShort/LayoutShortShowHide/PlaceLayout/X")
Daher führen wir einen weiteren Parameter ein, nämlich den Parent. Ohne Angabe des Parents zählt die Angabe von der Root aus, das wäre dann so:
Code: Alles auswählen
myX_Spinbox = gui.get_widget("CreateAndLayout/LayoutShort/LayoutShortShowHide/PlaceLayout/X")
Wenn man aber bereits die GUI Callbacks für den Inhalt eines Container Widgets macht, dann hat man auch den Parent. In diesem Fall also für 'PlaceLayout'. Dann reduziert sich die Angabe folgendermaßen:
Desweiteren bieten viele GUI Designer nur die normalen Widgets an. Aber man möchte auch eigene abgeleitete Widget Klassen implementieren. Da habe ich mir gedacht, dass man im GUI Designer solche widgets als placeholder widgets markiert. Wenn man etwa eine abgeleitete Buttonklasse verwenden will, dann wird das Widget im GUI Designer als Button dargestellt, aber entsprechend markiert. Beim Aufbau der GUI später wird das widget nicht dargestellt. Das geschieht dann erst, wenn man ein Objekt seiner eigenen Klasse kreiert hat und ihm dann die Attribute (config und layout) des Placeholderwidgets zuweist, etwa:
Code: Alles auswählen
mybutton = MyButton(parent)
gui.set_attributes(mybutton,'X',parent)
Vielleicht fällt Euch ja ein besserer Funktionsname ein. Ein Problem dabei bereitet das Packlayout. Wenn nämlich die normalen tkinter Widgets vorher gepackt werden und das abgeleitete Widget erst später, dann würde es an der falschen Stelle stehen. Da muss ich noch etwas implementieren, dass das Packlayout für alle Widgets im betreffenden Container erst vorgenommen wird, wenn alle Placeholder Widgets - gar keine Widgets, sondern nur Objekte mit dazu gespeicherten Attributen - mit Packlayout durch die verwendeten abgeleiteten eigenen Widgets ersetzt wurden. Würde das reichen? Wenn Ihr weitere Informationen über die Widgets braucht - die kann man auch mit ganz normalen tkinter Funktionen gewinnen - etwa welches Layout, kann ich gerne noch Funktionen dafür bereitsstellen. Das Layout erhält man etwa durch try: pack_info(), try: grid_info(), try: place_info(). Aber normalerweise weiß man selber, was man genommen hatte.