使用tkinter中的按钮更改变量

时间:2017-05-31 19:38:19

标签: python tkinter

问题所涉及的代码相当大,所以我在这里起草了一个指纹版本。

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中的按钮更改?我想错误地使用全球

1 个答案:

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

这会产生一个如下所示的窗口:

enter image description here

结果如果我们先按下底部按钮然后按下顶部按钮,再按下底部按钮,我们得到:

enter image description here