Wie bekomme ich den tkinter Widget Typ heraus?
Es geht um meinen GUI Designer. Ob jemand eine abgeleitete Klasse benützt und dazu den GUI Designer zum Verändern des Widgets benutzt ist dem egal.
Nur ein Problem ist dann das Speichern. Wenn ich eine Listbox als WrdlBrmpfd speichern würde, das würde ja gehen. Man kann es nachher bloß nicht mehr laden.
Aber beim Speichern will ich nicht alle Config Einstellungen speichern, sondern nur die, welche sich gegenüber den Defaulteinstellungen verändert haben.
Und dazu vergleiche ich das Widget mit einem jungfräulichen tkinter Widget.
Wenn ich aber WrdlBrmpfd mit tk.WrdlBrmpfd vergleichen will, dann stürzt mir das Programm ab.
Kann ich mit einem Befehl herausbekommen, um welches Widget es sich handelt? Muss ich alle Widget Typen vergleichen oder sollte ich mir das am Besten gleich beim Anlegen merken?
Wie bekomme ich den tkinter Widget Typ heraus?
@Alfons Mittelmeyer: am sinnvollsten ist es, sich eine Datenstruktur zu entwickeln, die alle nötigen Informationen speichert. Das wird dann zwangsläufig so etwas wie ein Baum. Dort legst Du dann nur die Einstellungen an, die auch geändert wurden, so sparst Du Dir das Vergleichen mit irgendwelchen Defaults. Vorteil der Datenstruktur: Du kannst sie einfach in eine Datei (am einfachsten JSON oder XML) serialisieren und deserialisieren. Du kannst einfach eine Methode schreiben, die einen komplett neuen Frame erzeugt (die Methode kannst Du ohne Änderungen auch in Produktivcode verwenden).
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
@Sirius Mach es doch nicht gleich kompliziert. Für das Speichern muss ich eh noch verschiedene Optionen anbieten.
Aber das Problem kann ich lösen, indem ich mal den Code update. Der sieht noch so aus:Und im nunmehr gesperrten Thread "Spazieren in der GUI" gibt es eine neue Fassung und da sieht der Code so aus:Das war schon länger her, aber da habe ich mit self.tkClass die erforderliche Info. Sollte meinen GUI Designer Code eben auch einmal updaten.
Aber das Problem kann ich lösen, indem ich mal den Code update. Der sieht noch so aus:
Code: Alles auswählen
class Label(tk.Label,GuiElement):
def __init__(self,myname="Label",**kwargs):
kwargs["master"] = _Selection._container
tk.Label.__init__(self,**kwargs)
self.isContainer = False
GuiElement.__init__(self,myname)
Code: Alles auswählen
class Label(GuiElement,StatTkInter.Label):
def __init__(self,myname="Label",**kwargs):
_initGuiElement(kwargs,StatTkInter.Label,self,myname,"Label")
@Alfons Mittelmeyer: Liefert die `winfo_class()`-Methode nicht schon das was Du brauchst?
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
@BlackJack Danke, die Info war prima