@BlackJack:
Also zu Definitionszeit und Ausführungszeit ein Beispiel:
Code: Alles auswählen
a = 5
b = 6
button.config(command=(lambda par1=a, par2=b: print(par1,par2)))
#button.config(command=(lambda: print(a,b)))
a="Hello"
b="all"
Der erste command gibt die Werte aus, die a und b bei der Definition des commands hatten (5,6) - also Werte zur Defintionszeit
Der zweite (auskommentierte) command gibt die Werte aus, die a und b zur Zeit des Buttondrucks haben. Das wäre also dann (Hello,all) - also Werte zur Ausführungszeit
Dann war natürlich missverständlich ausgedrückt, dass ich auf Funktionen verzichte. Auf Funktionsaufrufe verzichte ich natürlich nicht, sondern auf Funktionsdefinitionen.
Also Funktionen, die woanders definiert sind benütze ich selbstversändlich. And da benütze ich ein Modul von mir namens DynTkInter.
Und wenn man statt: from tkinter import *
folgendes schreibt: from DynTkInter import *
dann braucht man keinen Master oder auch Parent für ein widget angeben.
und dann bekommen die widgets auch Namen, sodass man sie mit Namen adressieren kann anstatt Variablen zu benutzen.
außerdem kann man manche Funktionen , wie pack, grid, place, config etc. auch ohne Referenzangabe benützen, da diese sich auf das gerade ausgewählte widget beziehen.
das gerade ausgewählte widget kan man auch mit der Funktion this() referenzieren.
Man kann dann zur Laufzeit des Programmes in der Gui desselben dann entweder mit Funktionsaufrufen in einem Parallelthread spazierengehen und die Widgets verändern.
Oder man kann das besser mit einem grafischen GuiCreator tun, der in einem Toplevel Window läuft.
Das sollte auch bei herkömmlichen tkinter Programmen funktionieren. Leider kann man nach GUI Veränderung bei denen dann aber nur die Gui ohne Funktion abspeichern.
Wenn man aber den neuen DynTkInter Programmierstil benützt, kann man zur Laufzeit auch den Code verändern und testen
Und dieser Code wird zur Laufzeit compiliert.
Der ganze GuiCreator hat nur zur Laufzeit compilerten Code. Und das sind bindings von Objekten an commands events oder messages. Geht also alles wieder verloren wenn man die dazugehörigen Widgets löscht.