2012-09-26 102 views
0

請幫助我。這很奇怪。 看看這個:Python TkInter Checkbutton不工作

#!/usr/bin/env python 
from Tkinter import * 
import database 

def insertBook(): 
insertWindow = Tk() 
insertWindow.title("Inserisci un nuovo romanzo nel database") 

checkvars = [] 
checkvars.append(IntVar()) 
checkvars.append(IntVar()) 

Checkbutton(insertWindow, text = 'male', variable=checkvars[0]).pack() 
Checkbutton(insertWindow, text = 'female', variable=checkvars[1]).pack() 
Button(insertWindow, text= 'show', command=lambda: show(checkvars)).pack() 


insertWindow.mainloop() 

def show(checkvars): 
print checkvars[0].get() 
print checkvars[1].get() 

class AppBase: 
def __init__(self, parent): 

    self.quadro1 = Frame(parent) 
    self.quadro1.pack() 
    self.welcolmeLabel = Label(self.quadro1, text = "Benvenuto nel database dei romanzi di Lory") 
    self.welcolmeLabel.pack() 

    self.insertButton = Button(self.quadro1, command = insertBook); 
    self.insertButton["borderwidth"] = 1 
    self.insertButton["text"] = "Inserisci un libro nel database" 
    self.insertButton["background"] = "pink" 
    self.insertButton.pack(side = "left") 

    self.quadro2 = Frame(parent) 
    self.quadro2.pack() 

    self.searchButton = Button(self.quadro1); 
    self.searchButton["borderwidth"] = 1 
    self.searchButton["text"] = "Ricerca nel database" 
    self.searchButton["background"] = "blue" 
    self.searchButton.pack(side = "left") 

    self.showButton = Button(self.quadro1); 
    self.showButton["borderwidth"] = 1 
    self.showButton["text"] = "Mostra i generi di libro" 
    self.showButton["background"] = "violet" 
    self.showButton.pack(side = "left") 

    self.exitButton = Button(self.quadro2, text = "Uscita", borderwidth = 1, background = "red", command = self.quadro1.quit) 
    self.exitButton.pack(side = RIGHT, pady = 20) 


if __name__ == '__main__': 

mainFinestra = Tk() 
mainFinestra.title('Database di Romanzi') 
app = AppBase(mainFinestra) 


listvars = [] 
listvars.append(IntVar()) 
listvars.append(IntVar()) 

Checkbutton(mainFinestra, text = 'male', variable=listvars[0]).pack() 
Checkbutton(mainFinestra, text = 'female', variable=listvars[1]).pack() 
Button(mainFinestra, text= 'show', command=lambda: show(listvars)).pack() 

mainFinestra.mainloop() 

似乎checkbuttons變量僅在mainFinestra設置。 如果我在另一個新窗口(如insertWindow)中創建檢查按鈕,checkvars中的變量始終爲0,即使按鈕被選中。相反,如果我嘗試檢查mainFinestra中的checkbutton,那麼函數「show」在被選中時返回1。有什麼不同?請,這個項目對我很重要。 謝謝

+0

代碼的縮進是錯誤的。 –

+0

你真的不應該有'Tk()'運行的多個實例。我甚至不確定在創建第二個'Tk()'後,你的gui的行爲是否定義。 – mgilson

+0

非常感謝。我已經嘗試了TopLevel,它似乎工作。很酷!謝謝!!!!!!!!!!! – user1576208

回答

2

你正在做Tkinter沒有設計的事情 - 你正在創建類Tk的兩個實例。您應該只創建一個實例,並且只能啓動一個事件循環。

如果您需要多個窗口,請創建Tkinter.Toplevel的實例。

+0

啊好吧......我明白了。但是,如果我想在點擊按鈕時打開另一個窗口......我該怎麼辦?我以爲Tk被用來打開窗戶... – user1576208

+0

@ user1576208:我更新了我的答案。 –