2017-07-28 73 views
0

我在基于选项菜单中的选择更新标签时遇到问题。下面是我的代码工作的例子:Tkinter:在OptionMenu选项更改时更改标签

import Tkinter as tk 
from Tkinter import * 

secs = ['Subject', 'Difficulty', 'Percent', 'Grade', 'Pass'] 

master = Tk() 
v = StringVar(master) 
v.set(secs[0]) 
def on_option_change(event): 
    #lab2.destroy() 
    lab2 = tk.Label(master, text=v.get()) 
    lab2.grid(row=2, column=1) 
w = OptionMenu(master, v, *secs, command=on_option_change) 
w.grid(row=1, column=0) 
lab1 = tk.Label(master, text='Current value:') 
lab1.grid(row=2, column=0, sticky=E) 
lab2 = tk.Label(master, text=secs[0]) 
lab2.grid(row=2, column=1, sticky=W) 
mainloop() 

的问题是,选择一个新的选项时,旧的标签仍然落后新的。然而,当我添加代码来摧毁旧的标签,我可以理解,得到如下错误:

UnboundLocalError: local variable 'lab2' referenced before assignment 

在一个容易解决任何建议将最赞赏。一般来说,我对Tkinter和GUI的创建颇为新手。我一直在寻找几个小时的答案,没有多大用处。

回答

0

通过在第一行的on_option_change函数中写入“global lab2”使lab2变量为全局变量。

+0

太棒了!谢谢!如果这很简单,你能解释一下为什么这样有效吗? – davo1979