【发布时间】:2017-05-31 19:38:19
【问题描述】:
问题所在的代码相当大,所以我在这里起草一个手指画版本。
import tkinter
variable = "data"
def changeVariable():
variable = "different data"
def printVariable():
print(variable)
window = tkinter.Tk
button1 = tkinter.Button(window, command=changeVariable)
button1.pack()
button2 = tkinter.Button(window, command=printVariable)
button2.pack()
所以在这个例子中,我按下第一个按钮来更改“变量”,然后按下第二个按钮来打印它。但是打印的是“数据”而不是“不同的数据”。我搜索了一下,决定在主代码和函数中定义变量之前使用 global,所以代码看起来像这样。
import tkinter
global variable
variable = "data"
def changeVariable():
global variable
variable = "different data"
def printVariable():
global variable
print(variable)
window = tkinter.Tk()
button1 = tkinter.Button(window, command=changeVariable)
button1.pack()
button2 = tkinter.Button(window, command=printVariable)
button2.pack()
window.mainloop()
但现在它说'名称'变量'未定义'。
本质上,我怎样才能让变量“变量”通过 tkinter 中的按钮进行更改?我想使用 global 有错吗?
【问题讨论】:
-
我认为你不需要第一个
global variable。 -
您的代码对我有用。你确定你没有在某个地方拼错“变量”吗?
-
在我进行两项更改后,您的第二个示例对我有效:
window = tkinter.Tk()并在末尾添加window.mainloop()。 -
@quamrana 所说的:
global指令用于函数内部,告诉函数在全局命名空间中查找名称。在全局命名空间本身中使用它是没有意义的。但实际上,避免使用可修改的全局变量是个好主意,因为它们破坏了程序的模块化。这样做的巧妙方法是将您的 GUI 定义为一个类,然后您可以使用实例属性来保存状态数据。顺便说一句,import tkinter as tk是一种常见的做法。然后你可以做button = tk.Button(window)之类的事情。