如图所示使用subprocess.Popen()启动进程后,我想创建一个带有“Abort”按钮的busy窗口(wx.Dialog)。这按预期工作;但是,如果给予进程完成所需的时间,则应该销毁繁忙窗口。在下面显示的代码中,这不会发生?
import subprocess
import wx
ProcessToCall = [Some, process, with, some, arguments]
Process = subprocess.Popen(ProcessToCall)
BusyDialog = wx.Dialog(...)
if BusyDialog.ShowModal() == wx.ID_CANCEL:
Process.kill()
Process.wait()
BusyDialog.Destroy()
我一直在尝试使用EndModal和wx.Dialog的各种其他方法,并在线咨询各种教程,但似乎没有达到预期效果,而且我完全没有想法。
我在Ubuntu 13.10上使用Python 2.7和wxPython 2.8。
答案 0 :(得分:1)
我认为问题实际上是ShowModal
,在用户点击窗口中的内容使其退出之前不会退出。来自文档:
显示模态对话框。在对话框之前,程序流程不会返回 已被wxDialog :: EndModal解雇。
我认为ShowModal
很合适,但你需要将流程传递给对话框,对话框可能需要某种定期检查才能完成流程(也许EVT_TIMER
)所以它可以关闭自己并在过程完成时返回。如果用户取消,它仍将返回中止代码,因此如果你看到它,你仍然想捕获并终止进程。