在画布中有一个按钮'新条目'这开始了Toplevel。它有一个提交按钮,一个取消按钮,一个OptionMenu和一个Label。目标是OptionMenu中的选定值更改Label文本。我没有为画布添加代码。
def Test(value):
p = value
print(p) # a test
E2.config(text=str(p))
def Vullen_Toplevel_Aankoop_EUR(i):
top = Toplevel()
top.geometry("%dx%d%+d%+d" % (600, 800, 250, 125))
BSubmit = Button(top, text="Submit", fg='green')
BSubmit.grid(row=1, column=0, sticky="ew", columnspan=1, padx=20)
BCancel = Button(top, text="Cancel", fg='red', command=top.destroy)
BCancel.grid(row=10, column=0, sticky="ew", columnspan=1, padx=20)
p = None
E2 = None
E1_opt = ["A","B","C"]
E1_var = StringVar(top)
E1_var.set(E1_opt[0])
W1 = OptionMenu(top, E1_var, *E1_opt, command=Test)
W1.grid(row=2, column=1, sticky="ew")
E2 = Label(top, text='test')
E2.grid(row=4, column=2, sticky="ew")
变量p的默认值为'为空'。 OptionMenu触发command = Test,它在控制台上打印p的新值。到目前为止一切都很好。
我尝试使用以下命令更新Label E2:E2.config(test = str(p))。不幸的是错误消息:
NameError:name' E2'未定义
虽然这里没有添加到代码中,但我尝试了以下内容:
我有点想法。你有分享的见解吗?感谢。
答案 0 :(得分:0)
在所有功能之外创建全局变量
E2 = None
使用global E2
通知函数,而不是要为全局/外部变量E2
赋值。如果没有global
,它将创建局部变量E2
,并且它不会分配给全局变量。
def Vullen_Toplevel_Aankoop_EUR(i):
global E2 # you need it because you use `E2 = ...`
E2 = Label(top, text='test')
完整
# create global variable
E2 = None
def Test(value):
#global E2 # you don't need it because you don't use `E2 = ...`
E2.config(text=value)
def Vullen_Toplevel_Aankoop_EUR(i):
global E2 # you need it because you use `E2 = ...`
E2 = Label(top, text='test')
# you can create also after functions
#E2 = None
BTW:更短
top.geometry("600x800+250+125")