0

私を助けてください。これは非常に奇妙です。これを見てください:

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

チェックボタン変数はmainFinestraでのみ設定されているようです。別の新しいウィンドウ(insertWindowなど)でチェックボタンを作成すると、ボタンがチェックされている場合でも、checkvarsの変数は常に0になります。代わりに、mainFinestraのチェックボタンをチェックしようとすると、チェックされている場合、関数「show」は1を返します。違いは何ですか?このプロジェクトは私にとって重要です。ありがとう

4

1 に答える 1

2

あなたは、Tkinter が行うように設計されていないことを行っています。つまり、 class の 2 つのインスタンスを作成していますTk。インスタンスを 1 つだけ作成し、イベント ループを 1 つだけ開始する必要があります。

複数のウィンドウが必要な場合は、 のインスタンスを作成しますTkinter.Toplevel

于 2012-09-26T13:56:17.873 に答える