2017-05-31 37 views
1

问题所在的代码相当大,因此我正在此处起草指纹版本。使用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() 

但现在它说'名称'变量'未定义'。

本质上,我怎样才能得到变量'变量'用tkinter中的按钮进行更改?想我想用全球

+1

我想你不需要第一个'全局变量'。 – quamrana

+0

你的代码适合我。你确定你没有在那里拼错“变数”吗? – Novel

+0

您的第二个示例适用于我,一旦我做了两个更改:'window = tkinter.Tk()'并在末尾添加'window.mainloop()'。 – FamousJameous

回答

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