Ich benutze Python 3.2.1 in Arch Linux x86_64.
Dieser macht mich wirklich verrückt: Ich möchte nur einen voreingestellten, vorgewählten Wert für ein ttk.Combobox
haben, sobald ich ihn rastere. Das ist mein Code:
Was zeichnet ein leeres Combobox
. Was komisch ist, ist, dass wenn ich keine Funktion verwende, es perfekt funktioniert:
Natürlich muss ich im realen Programm eine Funktion verwenden, also brauche ich eine andere Lösung.
Das Problem besteht darin, dass die Instanz von StringVar von Garbage-Collected erfasst wird. Dies liegt daran, dass es sich um eine lokale Variable handelt, da Sie Ihren Code geschrieben haben.
Eine Lösung besteht darin, eine Klasse zu verwenden, damit Ihre StringVar bestehen bleibt:
%Vor%Wenn die Funktion 'Combo' beendet wird, wird die lokale Variable 'value' zerstört. Sie benötigen eine persistente Variable, z. B. eine globale Variable oder eine Variable, die eine Eigenschaft einer Klasse ist, so dass der Wert nicht als Garbage-Collection erfasst wird, solange das Widget noch vorhanden ist.
Die get()
-Methode kann in Ihrer Funktion verwendet werden, um StringVar
umzubenennen und unter einem anderen Namen zu speichern, um zu vermeiden, dass sie durch die Garbage-Collection verloren geht.
Verwenden Sie dann keepvalue
anstelle von value:
Das hat 'A' in der Combobox für mich gezeigt.
Tags und Links python python-3.x tkinter combobox ttk