2017-12-27 1 views
0

Ich habe eine Tkinter List Box mit Städtenamen gefüllt. Ich möchte den ausgewählten Wert abrufen und an den nachfolgenden Code nach der Hauptschleife übergeben. Ich habe den folgenden tkinker Code:Destroy Tkinter Button nach dem Klick

master = tk.Tk() 

variable = StringVar(master) 
variable.set(cities_list[0]) # default value 

w = OptionMenu(master, variable, *cities_list) 
w.pack() 

def ok(): 
    print ("value is:" + variable.get()) 
    return variable.get() 
    window.destroy() 


button = Button(master, text="OK", command=ok) 
button.pack() 

mainloop() 


v_list = variable.get().split('-') 

Der Knopf steckt in einer Schleife und wird nicht geschlossen. Ich möchte den Button nach einer Auswahl schließen. Ich habe versucht sowohl "window.destroy()" und "master.destroy()"

Was mache ich falsch?

+0

Dies ist kein [MCVE] (https://stackoverflow.com/help/mcve). Was ist mindestens "Fenster"? – Nae

Antwort

2

Ihre Taste nicht destroy, weil ihre Funktion 'zurückkehrt', bevor Sie dies tun. Was ist auch schlecht, weil ein commandcallback method can't really return anywhere meaningful ist. Führen Sie die folgenden Änderungen:

some_outer_scope_var = None 

def ok(): 
    global some_outer_scope_var 
    some_outer_scope_var = variable.get() 
    print ("value is:" + variable.get()) 
    master.destroy() 

diese Weise können Sie den Wert von variable.get() auf some_outer_scope_var zuerst speichern und dann destroy alle GUI.

+0

Es stellt sich heraus, dass die Variable im äußeren Bereich war. Ich habe "some_outer_scope_var = variable.get()" entfernt und es hat angefangen zu arbeiten. – user61629

+0

@ user61629 Sollte nicht der Fall sein, es sei denn, Sie haben mehrere Instanzen von 'Tk'. – Nae