2017-05-31 65 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