2017-06-16 73 views
0

我正在使用四個單選按鈕和一個checkbutton的Python中的tkinter程序。該項目利用了GUI窗口和命令行窗口。該代碼應該創建按鈕,在框中顯示一個命令,等待幾秒鐘,然後根據按鈕有或未按下的按鈕做一些事情。Python tkinter IntVars沒有正確設置

這裏是我的創作按鈕的代碼 -

def __button1__(self): 

    radiovar = tkinter.IntVar() 

    check1var = tkinter.IntVar() 

    radiovar.set(0) 

    check1var.set(0) 

    self.frame1 = tkinter.Frame(self.main_window) 

    radio1 = tkinter.Radiobutton(self.frame1, text = 'Fire', variable = radiovar, value = 1) 

    radio2 = tkinter.Radiobutton(self.frame1, text = 'Earth', variable = radiovar, value = 2) 

    radio3 = tkinter.Radiobutton(self.frame1, text = 'Air', variable = radiovar, value = 3) 

    radio4 = tkinter.Radiobutton(self.frame1, text = 'Water', variable = radiovar, value = 4) 

    check1 = tkinter.Checkbutton(self.frame1, text = 'Shadow', variable = check1var,) 

    radio1.pack() 

    radio2.pack() 

    radio3.pack() 

    check1.pack() 

    radio4.pack() 

    self.frame1.pack(side = 'left') 

    self.frame1.after(100, self.__game__) 

這是創建GUI類的一部分。最後一行等待一秒鐘,然後啓動執行程序其餘部分的功能。該功能是 -

def __game__(self): 

    print('Select Shadow, then click on Water.') 
    self.frame1.after(500) 
    if check1var.get() == 1 and radiovar.get() == 4: 
     print('Nicely done!') 

創建窗口,第二遍,然後我得到一個異常說check1var是不確定的(與複選框伴隨而來的IntVar)。我發現我在設置或檢查IntVar時出錯了 - 我做錯了什麼,以及如何解決這個問題?

+0

'check1var'在'__button1__'的範圍內定義 - 只要'__button1__'完成,它的引用就會丟失 – asongtoruin

+0

如何將check1var的範圍增加到__game__? –

回答

1

使用一個類的多個功能內的一個變量,你必須把他們定義爲類的屬性,這意味着self.varname = var 定義他們,讓他們像self.varname

def __button1__(self): 

    self.radiovar = tkinter.IntVar() 

    self.check1var = tkinter.IntVar() 

    self.radiovar.set(0) 

    self.check1var.set(0) 

    self.frame1 = tkinter.Frame(self.main_window) 

    radio1 = tkinter.Radiobutton(self.frame1, text = 'Fire', variable = self.radiovar, value = 1) 

    radio2 = tkinter.Radiobutton(self.frame1, text = 'Earth', variable = self.radiovar, value = 2) 

    radio3 = tkinter.Radiobutton(self.frame1, text = 'Air', variable = self.radiovar, value = 3) 

    radio4 = tkinter.Radiobutton(self.frame1, text = 'Water', variable = self.radiovar, value = 4) 

    check1 = tkinter.Checkbutton(self.frame1, text = 'Shadow', variable = check1var,) 

    radio1.pack() 

    radio2.pack() 

    radio3.pack() 

    check1.pack() 

    radio4.pack() 

    self.frame1.pack(side = 'left') 

    self.frame1.after(100, self.__game__) 

和:

def __game__(self): 

    print('Select Shadow, then click on Water.') 
    self.frame1.after(500) 
    if self.check1var.get() == 1 and self.radiovar.get() == 4: 
     print('Nicely done!') 
1

假設這些方法是同一類的一部分,請使用self將它們作爲實例的屬性,以便它們可以在所有方法中進行訪問。

def __button1__(self): 
    self.radiovar = tkinter.IntVar() 
    self.check1var = tkinter.IntVar() 
    self.radiovar.set(0) 
    self.check1var.set(0) 
    # ... define buttons using self.checkvar and self.radiovar 

def __game__(self): 
    print('Select Shadow, then click on Water.') 
    self.frame1.after(500) 
    if self.check1var.get() == 1 and self.radiovar.get() == 4: 
     print('Nicely done!')