如何使用 tkinter 在嵌套函数中创建全局变量?
How to create global variable in nested function using tkinter?
我使用 tkinter 和一些嵌套函数编写了一些代码(参见下面的代码)并在 pycharm 中收到警告“全局变量 'value' 在模块级别未定义”。该程序按预期工作(window 标题重命名为 'text 0')但我仍然收到警告...我必须更改什么才能消除此警告? (程序比较复杂,我需要像它一样启动它,用window.after
,我也需要所有的功能)
from tkinter import *
def function_1():
global value
window.title("text " + value)
def function_2():
def function_3():
global value
value = ent.get()
if value == '0':
function_1()
ent = Entry()
ent.pack()
button = Button(text="ok", command=function_3)
button.pack()
window = Tk()
window.after(0, function_2)
window.mainloop()
global
关键字在函数内部用于控制对变量的赋值。通常在函数内 value = "bar"
在局部函数命名空间中创建一个“值”。 global value
在同一个函数中告诉 python 使用全局命名空间。
在您当前的代码中,模块级别 value
变量在调用 function_3
之前不会存在。在调用 function_3
之前尝试使用 value
的任何内容都将得到 NameError
。 function_1
就是一个很好的例子;如果在 function_3
之前调用它,则会出错。可能是您的代码永远无法在 function_3
之前调用 function_1
,但这对于 linter 或代码的未来维护者来说很难知道。这就是您收到警告的原因。
解决方案是为程序设置一个合理的默认值。我不知道什么对你有用,但这是一个抛出消息的例子。顺便说一句,function_1
中不需要 global value
。它的工作是控制赋值,你可以读取全局变量而不需要任何额外的注释。
from tkinter import *
value = None
def function_1():
if value is not None:
window.title("text " + value)
else:
import tkinter.messagebox
tkinter.messagebox.showerror("Error", "Do the thing before the thing")
def function_2():
def function_3():
global value
value = ent.get()
if value == '0':
function_1()
ent = Entry()
ent.pack()
button = Button(text="ok", command=function_3)
button.pack()
window = Tk()
window.after(0, function_2)
window.mainloop()
我使用 tkinter 和一些嵌套函数编写了一些代码(参见下面的代码)并在 pycharm 中收到警告“全局变量 'value' 在模块级别未定义”。该程序按预期工作(window 标题重命名为 'text 0')但我仍然收到警告...我必须更改什么才能消除此警告? (程序比较复杂,我需要像它一样启动它,用window.after
,我也需要所有的功能)
from tkinter import *
def function_1():
global value
window.title("text " + value)
def function_2():
def function_3():
global value
value = ent.get()
if value == '0':
function_1()
ent = Entry()
ent.pack()
button = Button(text="ok", command=function_3)
button.pack()
window = Tk()
window.after(0, function_2)
window.mainloop()
global
关键字在函数内部用于控制对变量的赋值。通常在函数内 value = "bar"
在局部函数命名空间中创建一个“值”。 global value
在同一个函数中告诉 python 使用全局命名空间。
在您当前的代码中,模块级别 value
变量在调用 function_3
之前不会存在。在调用 function_3
之前尝试使用 value
的任何内容都将得到 NameError
。 function_1
就是一个很好的例子;如果在 function_3
之前调用它,则会出错。可能是您的代码永远无法在 function_3
之前调用 function_1
,但这对于 linter 或代码的未来维护者来说很难知道。这就是您收到警告的原因。
解决方案是为程序设置一个合理的默认值。我不知道什么对你有用,但这是一个抛出消息的例子。顺便说一句,function_1
中不需要 global value
。它的工作是控制赋值,你可以读取全局变量而不需要任何额外的注释。
from tkinter import *
value = None
def function_1():
if value is not None:
window.title("text " + value)
else:
import tkinter.messagebox
tkinter.messagebox.showerror("Error", "Do the thing before the thing")
def function_2():
def function_3():
global value
value = ent.get()
if value == '0':
function_1()
ent = Entry()
ent.pack()
button = Button(text="ok", command=function_3)
button.pack()
window = Tk()
window.after(0, function_2)
window.mainloop()