1

我有一个脚本可以复制一个大文件(>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))

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

4

1 回答 1

1

您正在通过事件处理程序中的长时间运行任务来阻止您的 GUI 线程。你应该使用多线程。请参阅此处的说明。图书馆也wx.lib.delayedresult非常有用。

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

于 2013-01-29T15:40:00.437 回答