Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用tkinter在嵌套函数中创建全局变量?_Python_Variables_Tkinter_Global_Nested Function - Fatal编程技术网

Python 如何使用tkinter在嵌套函数中创建全局变量?

Python 如何使用tkinter在嵌套函数中创建全局变量?,python,variables,tkinter,global,nested-function,Python,Variables,Tkinter,Global,Nested Function,我使用tkinter和一些嵌套函数编写了一些代码(见下面的代码),并在pycharm中得到警告“全局变量‘value’在模块级别未定义”。程序按预期工作(窗口标题重命名为“文本0”),但我仍然收到警告。。。我必须改变什么才能摆脱这个警告?(程序比较复杂,我需要像它一样启动它,使用窗口。在之后,我还需要所有功能) global关键字在函数中用于控制变量的赋值。通常在函数value=“bar”中,在本地函数名称空间中创建一个“值”global value告诉python改用全局名称空间 在当前代码中

我使用tkinter和一些嵌套函数编写了一些代码(见下面的代码),并在pycharm中得到警告“全局变量‘value’在模块级别未定义”。程序按预期工作(窗口标题重命名为“文本0”),但我仍然收到警告。。。我必须改变什么才能摆脱这个警告?(程序比较复杂,我需要像它一样启动它,使用
窗口。在
之后,我还需要所有功能)


global
关键字在函数中用于控制变量的赋值。通常在函数
value=“bar”
中,在本地函数名称空间中创建一个“值”<同一函数中的code>global value
告诉python改用全局名称空间

在当前代码中,在调用
函数_3
之前,模块级
变量将不存在。在调用
函数3
之前尝试使用
值的任何操作都将得到
名称错误
<代码>功能_1
就是一个很好的例子;如果在
函数_3
之前调用,则会出现错误。您的代码可能永远不能在
函数_3
之前调用
函数_1
,但这对于代码的管理员或未来的维护人员来说是很难知道的。这就是你得到警告的原因

解决方案是为程序合理的值设置默认值。我不知道什么对你有效,但这里有一个例子,它提供了一个信息。顺便说一句,
函数1
中不需要全局值。它的工作是控制赋值,您可以读取全局变量而无需任何附加注释

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

button=button(text=“ok”,command=function\u 3)
不起作用,因为“function\u 3”不是模块级变量。您是否打算从
function\u 2
返回
function\u 3
,并执行
button=button(text=“ok”,command=function\u 2())
?很抱歉,代码没有缩进,它位于function 2Right中,但问题是
function\u3
command=function3
不可见。运行代码会得到
name错误:未定义名称“function_3”
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()