无法在wxpython中销毁wx.Dialog

时间:2014-03-13 15:25:29

标签: python user-interface process wxpython wxwidgets

如图所示使用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。

1 个答案:

答案 0 :(得分:1)

我认为问题实际上是ShowModal,在用户点击窗口中的内容使其退出之前不会退出。来自文档:

  

显示模态对话框。在对话框之前,程序流程不会返回   已被wxDialog :: EndModal解雇。

我认为ShowModal很合适,但你需要将流程传递给对话框,对话框可能需要某种定期检查才能完成流程(也许EVT_TIMER)所以它可以关闭自己并在过程完成时返回。如果用户取消,它仍将返回中止代码,因此如果你看到它,你仍然想捕获并终止进程。