在方法中调用Python Tkinter wait_window然后恢复方法
我有一个主窗口,它会创建一个设置窗口(这个窗口是一个顶层窗口),通过这行代码来实现:
main.wait_window( Setup_Panel.setup_panel(main) )
这个设置窗口有一个方法,可以把它的变量写入一个文本文件。不过,如果输入文件或输出目录的变量是空的,我会弹出一个警告窗口,这个警告窗口也是一个顶层窗口,作为设置窗口的等待窗口。这个方法是这样的:
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"
这个警告窗口会显示一条消息,并有两个按钮,一个是继续,另一个是取消。如果你按下取消,警告窗口会关闭,并把主窗口的执行命令设置为假,这样方法就不会继续执行。如果你按下继续,它应该关闭警告窗口,并把主窗口的执行命令设置为真,这样方法就会继续执行,并且还是会写入目录。不过,我的问题是,当警告窗口关闭时,它并不会立即返回到方法中。相反,它要等到设置窗口也被关闭后,才会返回到那个点并打印“FLAG”。
我该怎么写代码,让它在警告窗口关闭后直接恢复方法,而不是等我关闭警告窗口和设置窗口后再恢复?唯一调用 .mainloop() 的窗口是主面板窗口。
主面板定义为: main = Tkinter.Tk() 并调用 main.mainloop()
设置面板定义为: setup_main = Tkinter.Toplevel()
警告窗口定义为: warning_main = Tkinter.Toplevel()
如果有人能帮我解决这个问题,我将非常感激,谢谢!
2 个回答
我找到这个旧问题是因为我遇到了类似的情况。
根据我的发现,wait_window(w)
是在等待 w
被关闭,也就是 w.destroy()
被执行后,程序才会继续运行。在我的情况下,我自己做了一个对话框,但我没有关闭这个窗口。这可能也是你的情况。
简单来说:要让 wait_window()
正常工作,传入的窗口 w
必须被关闭。
我刚遇到了一个和你描述的情况很像的问题。子窗口出现了并且能正常工作,但调用它的那个函数在子窗口关闭后没有继续执行。不过,当父窗口也关闭后,那个一直没执行的函数终于恢复了。
我发现,我不小心给wait_window()
这一行设置了错误的参数。我写了创建子窗口的函数名,而不是子窗口自己的名字。
举个例子:
#some code before
def create_cw(self):
self.cw = Toplevel()
#some other after
哪里出错了:
wait_window(self.create_cw)
在我这里的解决办法是:
wait_window(self.cw)
我在寻找解决我问题的方法时发现了你的问题。希望我能帮上忙。