我正在尝试从条目(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()bpack()的结果,即None。这与您的问题无关,但也可能与您的意图无关。尝试这个:

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


这使用lambda创建一个新的匿名函数,该函数将使用atat.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/

10-10 18:25