我对 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()
添加支付类
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_pay 函数以某种方式执行后,add_ payment 函数中的某些内容可以关闭顶级窗口。提前致谢
最佳答案
您有几个问题。首先,您不应多次调用 mainloop
。您需要从 enter_button
函数中删除对 mainloop()
的调用。
另一个问题是您没有保存对顶层的引用,因此您或多或少不可能销毁它。您只需保存引用,然后对该引用调用destroy
。
self.top = Toplevel()
...
self.top.destroy()
关于python - 如果窗口中的按钮已绑定(bind)到函数,如何使用按钮关闭顶级 tkinter 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55896263/