无法在python中使用Tkinter传递变量

时间:2014-12-17 13:31:05

标签: python function variables tkinter tk

我试图从条目(a)中获取textvariable,然后将其放在新窗口中的标签中(w)。

from Tkinter import *
def abind(avar):
    print avar
    w=Toplevel()
    at=Label(w, text=avar).pack()
    w.mainloop()
app=Tk()
at=StringVar()
a=Entry(app,textvariable=at)
avar=at.get()
a.pack()
a.focus()
b=Button(app, command=abind(avar)).pack()
app.mainloop()

如果我在abind之后将avar从parantheses中取出,或者打开一个新的窗口immeadiatley并且如果我离开avar则不显示按钮小部件,它打印为空白。

1 个答案:

答案 0 :(得分:1)

您的代码存在两个主要问题:

  • avar=at.get()avar变量在该时间点具有文本变量的值,即它只是空字符串
  • 使用Button(app, command=abind(avar)),您调用函数abind(avar)并使用其结果作为命令,即None

此外,通过执行b=Button(...).pack()bpack()的结果,即None。这与你的问题无关,但它可能不是你想要的。试试这个:

b = Button(app, command=lambda: abind(at.get()))
b.pack()

这使用lambda创建一个新的匿名函数,该函数将使用atat.get()获取当前值,并使用该值调用abind,设置文本Label因此。{/ p>

如果您希望在Label中输入其他文字时更新Entry,请尝试以下操作:

def abind(avar):
    ...
    at = Label(w, textvariable=avar)  # use textvariable
    at.pack                           # pack again
    ...
...
b = Button(app, command=lambda: abind(at)) # pass at itself
...