我想把entery盒子文本从一个函数传递给另一个函数,但它给了我一个错误,即变量本身没有定义。这是我的代码。
from Tkinter import *
def mhello():
mtext=ment.get()
print mtext
def main():
root=Tk()
ment=StringVar()
root.title('Test')
mlabel=Label(root,text='Enter Text').pack()
mentry=Entry(root,textvariable=ment).pack()
mbutton=Button(root,text='Click Me',command=mhello).pack()
if __name__ == '__main__':
main()
它给出错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1489, in __call__
return self.func(*args)
File "pygui.py", line 3, in mhello
mtext=ment.get()
NameError: global name 'ment' is not defined
答案 0 :(得分:0)
首先,您有一个可变范围问题,函数中定义的变量对这些函数是本地的,因此ment
中定义main
但mhello
中未定义mhello
。将变量传递给ment
或将def mhello(var):
mtext=var.get()
print(mtext)
设为全局变量。所以我们可以传递这样的变量:
mbutton=Button(root, text='Click Me', command=lambda: mhello(ment)).pack()
然后我们需要从我们的按钮调用它:
mainloop
我们需要实际调用root.mainloop()
以使代码正常运行:
{{1}}
如果没有,将不会运行任何GUI。
在设计层面上,我通常会创建类来存储GUI中相同部分的变量,以避免需要传递大量参数。