Seite 1 von 1

Wie bekomme ich den tkinter Widget Typ heraus?

Verfasst: Dienstag 22. September 2015, 17:13
von Alfons Mittelmeyer
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?

Re: Wie bekomme ich den tkinter Widget Typ heraus?

Verfasst: Dienstag 22. September 2015, 17:37
von Sirius3
@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).

Re: Wie bekomme ich den tkinter Widget Typ heraus?

Verfasst: Dienstag 22. September 2015, 18:12
von Alfons Mittelmeyer
@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:

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)
Und im nunmehr gesperrten Thread "Spazieren in der GUI" gibt es eine neue Fassung und da sieht der Code so aus:

Code: Alles auswählen

class Label(GuiElement,StatTkInter.Label):
        def __init__(self,myname="Label",**kwargs):
                _initGuiElement(kwargs,StatTkInter.Label,self,myname,"Label")
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.

Re: Wie bekomme ich den tkinter Widget Typ heraus?

Verfasst: Dienstag 22. September 2015, 19:16
von BlackJack
@Alfons Mittelmeyer: Liefert die `winfo_class()`-Methode nicht schon das was Du brauchst?

Re: Wie bekomme ich den tkinter Widget Typ heraus?

Verfasst: Mittwoch 23. September 2015, 08:45
von Alfons Mittelmeyer
@BlackJack Danke, die Info war prima