2012-09-26 2 views
0

S'il vous plaît, aidez-moi. C'est très étrange. Regardez ceci:Python TkInter Checkbutton ne fonctionne pas

#!/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() 

Il semble que les variables de checkbuttons sont fixées uniquement dans les mainFinestra. Si je crée des checkbuttons dans une autre nouvelle fenêtre (comme insertWindow), les variables dans checkvars sont toujours 0, même si les boutons sont cochés. Au lieu de cela, si j'essaie de cocher la case à cocher dans la fonction mainFinestra, la fonction "show" renvoie 1 si elles sont cochées. Quelle est la différence? S'il vous plaît, ce projet est important pour moi. Merci

+0

L'indentation de votre code est incorrecte. –

+0

Vous ne devriez pas avoir plusieurs instances de 'Tk()' qui tournent. Je ne suis même pas sûr que le comportement de votre gui soit défini une fois que vous avez créé une seconde 'Tk()'. – mgilson

+0

Merci beaucoup.J'ai essayé TopLevel et il semble fonctionner. Très sympa! Je vous remercie!!!!!!!!!!! – user1576208

Répondre

2

Vous faites quelque chose que Tkinter n'est pas conçu pour faire - vous créez deux instances de la classe Tk. Vous ne devez jamais créer qu'une seule instance et ne démarrer qu'une seule boucle d'événement.

Si vous avez besoin de plusieurs fenêtres, créez des instances de Tkinter.Toplevel.

+0

Ah ok ... je comprends. Mais si je veux ouvrir une autre fenêtre en cliquant sur un bouton ... comment dois-je faire? Je pensais que Tk était utilisé pour ouvrir les fenêtres ... – user1576208

+0

@ user1576208: J'ai mis à jour ma réponse. –

Questions connexes