强制ProgressDialog在销毁时关闭

时间:2015-11-12 16:18:11

标签: python python-2.7 wxpython

环境:我正在使用wxPython Phoenix 3.0.3和Python 2.7.10。

情况:我有一个简单的ProgressDialog按预期工作,只有在完成时才会自动关闭。对话框中有一个关闭按钮,该按钮在进度结束前被禁用。此时对话框将等待用户单击“关闭”按钮。

问题:我想自动关闭它(无需等待用户操作)。

我尝试过的内容:致Close()Destroy()的电话无法正常工作。我已使用Yield()确保处理所有事件并尝试在不同时间段内休眠以确保处理所有堆叠事件。

参数:我不想使用线程,这个问题太简单了,我不相信这是问题(但如果提供一个简单的解决方案)使用线程,所以就这样吧。

最低工作示例(MWE):

# max progress for progress dialog
max_progress = len(unparsed_files)
progress_dlg = wx.ProgressDialog("Parsing", 'Processing...', max_progress, self, 
                                 style=wx.PD_ELAPSED_TIME)

# parse files
for i, uf in enumerate(unparsed_files):
    wx.Yield()
    progress_dlg.Update(i, 'Processing {}'.format(uf))
    self.parse(uf)

progress_dlg.Update(max_progress, 'Parsing completed')
progress_dlg.Destroy()
wx.Yield()

替代解决方案:没有按钮的模态对话框,不需要任何用户操作,可以更新wx.Gauge,然后销毁对话框。

如何关闭和销毁ProgressDialog而无需等待用户单击“关闭”按钮(或使用没有替换的对话框)?

1 个答案:

答案 0 :(得分:1)

您应该将wx.PD_AUTO_HIDE标志添加到样式参数。

来自wxpython的documentation强调是我的):

  

一旦达到进度表的最大值,就会使进度对话框从屏幕上消失。 如果此样式不存在,一旦达到最大值并且等待用户将其解除,对话框将变为模态对话框。