在画布上调整标签文本有一个按钮,启动一个Toplevel为“新条目”。它有一个提交按钮,一个取消按钮,一个OptionMenu和一个标签。目标是从OptionMenu中选择的值更改标签文本。我没有添加画布的代码。Tkinter的:基于改变OptionMenu
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触发命令= Test,它在控制台上输出p的新值。到现在为止还挺好。
我试图与更新标签E2:E2.config(试验= STR(P))。不幸的是,错误消息:
NameError: name 'E2' is not defined
虽然不添加到代码在这里,我试过如下:
- 定义E2标签为“空”,或者作为标签的正下方,我定义的“P” ,错误是一样的。
- 定义在高清测试(值),但这里E2标签 - 当然 - 错误是顶层()顶部没有定义。
- 而不是命令=测试我试着command = lambda:Test(top,E1_var.get())并将Test方法更改为def Test(top,value),但错误是:TypeError:()取0位置论点,但1给出了
我有种想法。你有分享见解吗?谢谢。
'E2'是只存在于一个函数的局部变量。在所有功能之外定义它 - 即。 'E2 = None',然后你会有全局变量。然后你可以在'Vullen_Toplevel_Aankoop_EUR'里面使用'global E2'来通知函数使用这个变量(因为你使用'='赋值)。在'Test'中,你不必使用'global E2',因为你不使用'=',它会自动使用外部'E2'。 – furas
@furas说实话,我不明白,如果证实了方法与否。 Vullen_Toplevel_Aankoop_EUR(现在为= None,代码示例更新)中定义了p和E2,并且可以在[Test] [value]变量中用[=]接收。但仍然E2定义了一个Button,稍后在Vullen_Toplevel_Aankoop_EUR中设置仍然没有在Test中定义。我在Toplevel()函数之外移动了E2 = None定义,但结果保持不变。也许你更多地澄清你的陈述。谢谢。 –
再读一遍:定义'E2 = None' ** OUTSIDE FUCTIONS ** - 并使用'global E2' ** INSIDE FUNCTIONS **。 – furas