我在python中有一个Tkinter应用程序,我正在尝试使用自定义对话框。所以我有一个主App
类和一个扩展Dialog
的{{1}}类。在Toplevel
类的正文中,需要弹出App
并允许用户输入可以传递给主Dialog
的信息。
我知道我需要使用App
方法,以便主应用程序在继续执行代码之前等待销毁对话框。但出于某种原因,即使在退出对话框后,程序也不会继续。
我的代码看起来像
wait_window()
当我运行应用程序时,对话框按预期显示,并按预期工作。但是,当我按下角落里的红色X时,程序不会继续。对话框关闭,"销毁"打印,所以我知道正在调用class App:
def __init__(self):
self.root = Tk()
#more init code...
#more unrelated methods...
def analyze(self):
dialog = Dialog()
self.root.wait_window(dialog)
print("Continuing...")
#use the data collected in 'dialog'
class Dialog(Toplevel):
def __init__(self):
Toplevel.__init__(self)
#set up the components of the dialog
#all input data gets saved as instance variables so I can access it
self.mainloop()
def destroy(self):
print("Destroying")
Toplevel.destroy(self)
方法,但是"继续"没有打印,也没有使用任何数据。
我尝试在对话框中添加一个按钮,调用destroy
作为其命令来明确销毁它。我还尝试不覆盖self.destroy
中的destroy
方法,看看是否会导致它,但这些方法都没有效果。
我还在做Dialog
而不是dialog.wait_window()
,看看是否有帮助但是没有。
非常感谢任何帮助。如果需要更多代码,我可以提供。提前谢谢。
答案 0 :(得分:1)
请勿再次拨打mainloop()
。在程序的生命周期中,mainloop()
应该始终被调用一次。