gpt4 book ai didi

python - 如果窗口中的按钮已绑定(bind)到函数,如何使用按钮关闭顶级 tkinter 窗口

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:04 26 4
gpt4 key购买 nike

我对 tkinter 和 Python 有点陌生,并且正在从事一个为期一学期的项目。基本上我有一个主 tkinter 窗口,然后从那个窗口,根据用户输入调用 topLevel 窗口。在每个 topLevel 窗口中,我都有一个执行功能的按钮,我还希望此按钮在执行该功能后关闭 topLevel 窗口。解决此问题的最佳方法是什么?

我试图销毁或关闭窗口,但它最终也关闭了主窗口。我只是在寻找一种方法来关闭 topLevel 窗口并通过单击按钮执行该功能

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_payment 函数中的某些东西在以某种方式执行 add_pay 函数后关闭 topLevel 窗口。提前致谢

最佳答案

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

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

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

关于python - 如果窗口中的按钮已绑定(bind)到函数,如何使用按钮关闭顶级 tkinter 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55896263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com