Legen Sie einen Standardwert für eine ttk Combobox fest

8

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:

%Vor%

Was zeichnet ein leeres Combobox . Was komisch ist, ist, dass wenn ich keine Funktion verwende, es perfekt funktioniert:

%Vor%

Natürlich muss ich im realen Programm eine Funktion verwenden, also brauche ich eine andere Lösung.

    
kynikos 29.07.2011, 17:00
quelle

3 Antworten

23

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%     
eryksun 29.07.2011, 17:43
quelle
4

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.

    
Bryan Oakley 29.07.2011 21:58
quelle
0

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.

%Vor%

Verwenden Sie dann keepvalue anstelle von value:

%Vor%

Das hat 'A' in der Combobox für mich gezeigt.

    
MJ_ 30.09.2017 21:52
quelle