2017-12-27 882 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