如果窗口中的按钮已绑定到某个函数,如何用按钮关闭顶层tkinter窗口

2024-04-24 19:44:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我对tkinter和Python有些陌生,正在做一个为期一学期的项目。基本上我有一个主tkinter窗口,然后从该窗口调用顶级窗口,具体取决于用户输入。在每个顶层窗口中,我都有一个执行某个功能的按钮,我还希望该按钮在执行该功能后关闭顶层窗口。解决这个问题的最佳方法是什么?你知道吗

我试图破坏或关闭窗口,但它最终也关闭了主窗口。我只是在寻找一种方法来关闭顶层窗口,并执行一个按钮点击功能

class MainWindow:
        # Entry box
        self.entry = StringVar()
        self.text_box = Entry(master, textvariable=self.entry)
        self.text_box.grid(row=1, column=2)

        # Displays and binds button, so when clicked, the enter_button function is called
        self.input_button = Button(master, text='Enter', command=self.enter_button)
        self.input_button.grid(row=1, column=3, sticky='W')


    def enter_button(self):
        # Get user input and perform the given command
        command = self.entry.get()

        # Creates a root for a toplevel window
        top = Toplevel()

        if command == '1':
            add_gui = AddPayment(top)
            top.mainloop()
        elif command == '2':
        #rest of classes/commands

主要

def main():
    root = Tk()
    app = MainWindow(root)
    root.mainloop()


if __name__ == '__main__':
    main()

AddPayment类

class AddPayment:
    def __init__(self,master):
        self.master = master
        self.add_label = Label(master, text='How much is the payment for?')

        # payment box
        self.pay = StringVar()
        self.pay_box = Entry(master, textvariable=self.pay)
        self.add_button = Button(master, text='Add', command=self.add_payment)

        # position widgets
        self.pay_box.grid(row=1, column=2)
        self.add_label.grid(row=1, column=1)
        self.add_button.grid(row=1, column=3)

    def add_payment(self):
        database.add_pay(self.pay.get())

在本例中,我希望add\u pay函数中的某些内容在add\u pay函数以某种方式执行之后关闭顶层窗口。提前谢谢


Tags: textselfmasterboxadddefcolumnbutton
1条回答
网友
1楼 · 发布于 2024-04-24 19:44:04

你有几个问题。首先,您不应该多次调用mainloop。您需要从enter_button函数中删除对mainloop()的调用。你知道吗

另一个问题是,您没有保存对顶级的引用,因此您或多或少地不可能销毁它。您只需保存一个引用,然后对该引用调用destroy。你知道吗

self.top = Toplevel()
...
self.top.destroy()

相关问题 更多 >