问题所涉及的代码相当大,所以我在这里起草了一个指纹版本。
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()
但现在它说' name'变量'没有定义'。
基本上,我如何获得变量'变量'用tkinter中的按钮更改?我想错误地使用全球?
答案 0 :(得分:1)
你对全球的使用有点偏。您无需在整个地方定义全局。让我们分解一下。
您不需要在全局命名空间中定义全局命名空间。
from tkinter import *
window = Tk()
myvar = "data" # this variable is already in the global namespace
这告诉函数在与变量myvar
交互时检查全局命名空间。
def changeVariable():
global myvar
myvar = "different data"
此print语句有效,因为它在检查其他名称空间后检查全局变量名称空间,而不查找变量myvar
。
def printVariable():
print(myvar)
button1 = Button(window, command = changeVariable)
button1.pack()
button2 = Button(window, command = printVariable)
button2.pack()
window.mainloop()
因此,如果我们将这些代码放在一起,我们将获得所需的结果。
from tkinter import *
window = Tk()
variable = "data"
def changeVariable():
global variable
variable = "different data"
def printVariable():
print(variable)
button1 = Button(window, command = changeVariable)
button1.pack()
button2 = Button(window, command = printVariable)
button2.pack()
window.mainloop()
这会产生一个如下所示的窗口:
结果如果我们先按下底部按钮然后按下顶部按钮,再按下底部按钮,我们得到: