如何在另一个窗口中打开python中的新窗口?

时间:2015-07-22 10:12:40

标签: python lambda tkinter window

我的tkinter有问题。当用户按下按钮时,我需要打开一个新窗口,其中包含一些参数数据。问题在于,方法是设置"当我创建新窗口时,条目不起作用,但是当我从主类创建窗口时它可以工作。我该怎么做才能解决这个问题? 这是按钮:

Button(self.frameTabella, text="prenota", command=lambda id=ConcreteLibro.getIdentificativo():self.prenotaLibro(id)).grid(row=i, column=14)

这是新窗口的代码:

class GUIPrestitoLibro:
    import datetime

    def __init__(self, id):
        self.GestioneLibri=GestioneLibri()
        self.finestraPrestito=Tk()
        self.finestraPrestito.geometry()
        self.finestraPrestito.title("Prestito/consultazione")
        today = datetime.today()

        idLibroLabel=Label(self.finestraPrestito, text="ID libro:").grid(row=1, column=0)
        self.idLibro=StringVar(value=id)
        idLibro=Entry(self.finestraPrestito, textvariable=self.idLibro, state="readonly").grid(row=1, column=1)

        idUtenteLabel=Label(self.finestraPrestito, text="ID utente:").grid(row=2, column=0)
        self.idUtente=StringVar()
        idUtente=Entry(self.finestraPrestito, textvariable=self.idUtente).grid(row=2, column=1)

        dataInizioPrestitoLabel=Label(self.finestraPrestito, text="Data inizio prestito:").grid(row=3, column=0)
        self.dataInizioPrestito=StringVar(value=today.strftime("%d/%m/%Y"))
        dataInizioPrestito=Entry(self.finestraPrestito, textvariable=self.dataInizioPrestito, state="readonly").grid(row=3, column=1)

        dataFinePrestitoLabel=Label(self.finestraPrestito, text="Data fine prestito:").grid(row=4, column=0)
        self.dataFinePrestito=StringVar()
        dataFinePrestito=Entry(self.finestraPrestito, textvariable=self.dataFinePrestito).grid(row=4, column=1)

        registra=Button(self.finestraPrestito, text="conferma", command=self.registraPrestito).grid(row=5, column=0)
        resetta=Button(self.finestraPrestito, text="resetta", command=self.resettaCampi).grid(row=5, column=1)

        self.finestraPrestito.mainloop()


    def resettaCampi(self):
        self.idUtente.set("")
        self.dataFinePrestito.set("")

    def registraPrestito(self):
        self.GestioneLibri.prestitoLibro(self.idLibro.get(), self.idUtente.get(), self.dataInizioPrestito.get(), self.dataFinePrestito.get())
        self.finestraPrestito.destroy()

我怎样才能上课" GUIPrestitoLibro" Toplevel的一个例子?

1 个答案:

答案 0 :(得分:2)

问题是这个类创建了Tk的第二个实例。 tkinter应用应始终只有一个Tk个实例,并且应该只调用mainloop()一次。

如果你需要创建多个窗口,除了根窗口之外的所有窗口都必须是Toplevel的实例,除了根窗口之外,你不应该在任何窗口上调用mainloop()