StaticText显得太晚了

时间:2013-01-29 14:36:48

标签: wxpython

我有一个脚本,它将复制一个大文件(> 100MB)。这种复制需要大约2秒,所以我希望在复制开始之前显示文本('开始'),并在复制完成时显示另一个文本('结束')。这是我的代码:

def copy(self,event):
    wx.StaticText(self.startpanel, -1, 'start', (80,110))
    if not(os.path.exists(path2)):
        os.mkdir(path2)
    shutil.copy(path1+'/test.zip',path2+'/test.zip')
    wx.StaticText(self.startpanel, -1, 'end', (80,150))

问题:当调用事件 copy 时,我的面板上没有任何内容显示2秒,在这2秒后(复制完成时)两个StaticTexts同时出现! 为什么在复制zip文件之前我的第一个StaticText没有出现?我该如何解决?

1 个答案:

答案 0 :(得分:1)

您通过在事件处理程序中长时间运行任务来阻止您的GUI线程。您应该使用多线程。请参阅说明here。另外wx.lib.delayedresult库非常有用。

所以基本上我的解决方案是:将您的标签设置为“开始”并使用wx.lib.delayedresult启动工作人员。工作线程应该复制文件。完成后,将调用消费者功能。您在消费者功能中将标签设置为“结束”。