我有一个主窗口,通过以下代码行创建一个设置窗口(定义为顶级窗口)作为wait_window:
main.wait_window( Setup_Panel.setup_panel(main) )
该设置窗口有一个方法将其变量写入文本文件,但是如果输入文件或输出目录变量为空,我将一个警告弹出窗口作为设置窗口的wait_window调用,该窗口也定义为顶层窗口。方法如下:
def write_to_directory_file(main):
main.execute_command = True
if (main.input_directory_location.get().strip() == ""):
main.wait_window( Error_Box.WarningPopup(main, "Input File Missing") )
elif (main.output_directory_location.get().strip() == ""):
main.wait_window( Error_Box.WarningPopup(main, "Output Directory Missing") )
if execute_command:
directory_file = open("plink.dir", 'w')
directory_file.write("input_file: " + main.input_directory_location.get() + "\n")
directory_file.write("output_directory: " + main.output_directory_location.get() + "\n")
directory_file.write("output_file: " + main.output_file_name.get() + "\n")
directory_file.write("hom_name: " + main.HOM_name.get() + "\n")
enable_parent_window(main.parent_main)
main.destroy()
print "FLAG"
警告弹出窗口显示消息,两个按钮一个是Continue,另一个是Cancel。 如果按取消,将销毁警告弹出窗口并将main.execute_command设置为False,因此该方法将不会继续。如果你按下继续它应该销毁弹出窗口并将main.execute_command设置为true,这样该方法将继续并写入目录。我的问题是,当警告弹出窗口被销毁时,它不会立即返回到该方法。相反,它不会返回到那一点并打印“FLAG”,直到设置窗口也被销毁。
我如何编码它以便在警告弹出窗口被破坏后直接恢复方法,而不是在我销毁警告窗口和设置窗口之后?调用.mainloop()的唯一窗口是主面板窗口。
主面板定义为:main = Tkinter.Tk() 并调用main.mainloop()
设置面板定义为:setup_main = Tkinter.Toplevel()
警告弹出窗口定义为:warning_main = Tkinter.Toplevel()
任何帮助解决这个问题都将不胜感激,谢谢!
答案 0 :(得分:0)
我刚遇到一个问题,就像你描述的问题一样。子窗口出现并工作但是在子窗口关闭后调用它的函数没有恢复。但是,在父窗口也关闭之后,最终没有恢复的功能终于恢复了。
我发现,我不小心为wait_window()
行设置了错误的参数。我编写了创建子窗口的函数名称,而不是子窗口自己的名称。
示例:
#some code before
def create_cw(self):
self.cw = Toplevel()
#some other after
出了什么问题:
wait_window(self.create_cw)
在我的案例中解决方案是什么:
wait_window(self.cw)
我在搜索问题的解决方案时找到了您的问题。我希望我能提供帮助。
答案 1 :(得分:0)
我发现了这个老问题,因为我遇到了类似的问题。
根据我的发现,wait_window(w)
等待w
在w.destroy()
中被销毁,然后将正常的控制流程返回给程序。就我而言,我也实现了自己的对话窗口,但我并没有破坏窗口。可能是你的情况。
TL / DR:必须销毁wait_window()的窗口参数才能继续正常的控制流程。