Python中声明全局变量message仍提示未定义的问题求助
问题分析与解决方法
你的代码报错核心原因是代码执行顺序不符合tkinter的事件驱动逻辑:
- 你在
root.mainloop()启动前就执行了if message in ['1886', '2022']的判断,但此时用户还没点击Send按钮,getInputtemp函数从未被调用,message这个全局变量完全没有被定义,自然会触发"name 'message' not defined"错误。 - 虽然你在
getInputtemp里声明了global message,但这个声明只是告诉函数要使用全局作用域的message,并没有在全局作用域提前创建这个变量。
修正方案(推荐)
把判断逻辑移到按钮的回调函数getInputtemp中,这样每次用户点击Send按钮、输入内容被获取后,立刻检查并执行对应逻辑,符合tkinter的交互流程:
import tkinter as tk root = tk.Tk() root.geometry("600x400") message_var2 = tk.StringVar() def page2(message): print(f'test\n{message}') def getInputtemp(): global message message = message_var2.get() message_var2.set("") # 点击按钮后立即检查输入内容 if message in ['1886', '2022']: page2(message) message_entryi = tk.Entry(root, textvariable=message_var2, font=('calibre', 10, 'normal')) message_entryi.pack() save_btn2 = tk.Button(root, text='Send', command=getInputtemp) save_btn2.pack() root.mainloop()
补充:如果需要提前全局初始化message
如果确实要在全局作用域先定义message避免未定义错误,可以在代码开头添加初始化语句,但要注意此时初始值不会触发page2,只有点击按钮后message才会被更新:
import tkinter as tk root = tk.Tk() root.geometry("600x400") message_var2 = tk.StringVar() # 全局初始化message变量 message = "" def page2(message): print(f'test\n{message}') def getInputtemp(): global message message = message_var2.get() message_var2.set("") message_entryi = tk.Entry(root, textvariable=message_var2, font=('calibre', 10, 'normal')) message_entryi.pack() save_btn2 = tk.Button(root, text='Send', command=getInputtemp) save_btn2.pack() # 此时message初始为空,不会触发page2,若需要点击后检查仍需移到回调里 if message in ['1886', '2022']: page2(message) root.mainloop()
内容的提问来源于stack exchange,提问作者user19533292
相关产品推荐
相关产品推荐

