2012-09-26 4 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에서 체크 버튼을 검사하려고하면 "show"함수는 체크되면 1을 반환합니다. 차이점이 뭐야? 제발,이 프로젝트는 저에게 중요합니다. 감사합니다

+0

코드의 들여 쓰기가 잘못되었습니다. –

+0

'Tk()'의 여러 인스턴스를 실제로 실행하면 안됩니다. 두 번째'Tk()'를 만들면 gui의 동작이 정의되는지 확실하지 않습니다. – mgilson

+0

고맙습니다. TopLevel을 시도했으며 제대로 작동하는 것 같습니다. 아주 멋지다! 고맙습니다!!!!!!!!!!! – user1576208

답변

2

당신은 Tkinter가 설계하지 않은 것을하고 있습니다 - 당신은 클래스 Tk의 두 인스턴스를 생성하고 있습니다. 하나의 인스턴스 만 만들고 하나의 이벤트 루프 만 시작하면됩니다.

여러 창이 필요한 경우 Tkinter.Toplevel의 인스턴스를 만듭니다.

+0

아 아아 ... 이해합니다. 하지만 버튼을 클릭 할 때 다른 창을 열려면 어떻게해야합니까? Tk가 창문을 여는 데 사용 된 줄 알았는데 ... – user1576208

+0

@ user1576208 : 대답을 업데이트했습니다. –