繁体   English   中英

我不断收到 name 'message' not defined in python 即使我在 function 中将其设为全局变量并且我正在调用它

[英]I keep getting name 'message' not defined in python even though I made it a global variable in the function and I'm calling it

代码(蟒蛇):

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("")


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()

if message in ['1886', '2022']:
    page2(message)
root.mainloop()

我想在 function 之外使用变量“消息”,但它一直给我未定义的错误

即使我将它设为全局变量并且在尝试使用它之前我调用了 function 我仍然会收到错误消息,即使在将其设为全局变量并调用它在过去与其他事情一起工作它在这里不起作用我正在做某事错误的? 我忘记了一些小细节吗?

您在这里遇到的问题是您的 function getInputtemp没有被解雇。 它仅在单击按钮save_btn2时被触发。 此外,发生错误的if语句只会被触发一次。 要解决此问题,您可以按照@Tkirishima 的建议进行操作。

或者只是将if语句移动到getInputtemp function 中。

def getInputtemp():
    #global message 
    #Then you would no longer need message as a global variable
    message = message_var2.get()
    message_var2.set("")
    if message in ['1886', '2022']:
        page2(message)

但是,如果您确实想要 function 之外的if语句(如前所述,我不建议这样做,它会在您启动脚本时执行,而不会再执行):

getInputtemp() #The function is called to create message as global variable
if message in ['1886', '2022']:
    page2(message)

您遇到的问题是global关键字的使用。

问题是,即使值不存在于全局 scope 中,您也使用全局。

如果你想让你的程序工作,最好的办法是在程序开始时将message定义为None ,通过这个过程, message存在于全局 scope 中,值为None

...
root.geometry("600x400")
message_var2 = tk.StringVar()
message = None # <<<<<<<<<<

def page2(message):
    print(f'test\n{message}')
...

有关的:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM