2017-12-27 444 views
0

我有一個Tkinter列表框填充了城市名稱。我想抓住選定的值並在主循環之後將其傳遞給後續代碼。我有以下tkinker代碼:點擊後破壞Tkinter按鈕

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('-') 

該按鈕卡在一個循環,不會關閉。我想在選擇後關閉按鈕。我試過「window.destroy()」和「master.destroy()」

我在做什麼錯?

+0

這不是[MCVE](https://stackoverflow.com/help/mcve)。什麼是「窗口」至少是什麼? – Nae

回答

2

您的按鈕不是destroy,因爲它的功能在返回之前返回。這也是不好的,因爲commandcallback method can't really return anywhere meaningful。執行以下更改:

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() 

這樣,你節省的variable.get()some_outer_scope_var,然後再destroy所有GUI的價值。

+0

事實證明,變量是在外部範圍。我刪除了「some_outer_scope_var = variable.get()」,它開始工作。 – user61629

+0

@ user61629除非有多個'Tk'實例,否則不應該是這種情況。 – Nae