我正在尝试从条目(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()
如果我将avar绑定后将avar从寄生虫中取出,它将打印为空白,或者如果我离开avar,则打开一个新窗口,并且不显示按钮小部件。
最佳答案
您的代码有两个主要问题:
使用avar=at.get()
时,avar
变量在该时间点具有text变量的值,即它只是空字符串
使用Button(app, command=abind(avar))
,您将调用函数abind(avar)
并将其结果用作命令,即None
另外,通过执行b=Button(...).pack()
,b
是pack()
的结果,即None
。这与您的问题无关,但也可能与您的意图无关。尝试这个:
b = Button(app, command=lambda: abind(at.get()))
b.pack()
这使用
lambda
创建一个新的匿名函数,该函数将使用at
从at.get()
获取当前值,并使用该值调用abind
,并相应地设置Label
的文本。如果您希望在
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
...
关于python - 无法将变量传递给python中的Tkinter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27526750/