1

大きなファイル (>100MB) をコピーするスクリプトがあります。このコピーには約 2 秒かかるため、コピーを開始する前にテキスト ('start') を表示し、コピーが終了したら別のテキスト ('end') を表示します。これは私のコードです:

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 ファイルをコピーする前に最初の StaticText が表示されないのはなぜですか? どうすれば解決できますか?

4

1 に答える 1

1

イベントハンドラーで長時間実行されているタスクによってGUIスレッドをブロックしています。マルチスレッドを使用する必要があります。ここの説明を参照してください。また、wx.lib.delayedresultライブラリは非常に便利です。

したがって、基本的に私の解決策は次のようになります。ラベルを「開始」に設定し、を使用してワーカートレッドを開始しwx.lib.delayedresultます。ワーカースレッドはファイルをコピーする必要があります。終了すると、コンシューマー関数が呼び出されます。コンシューマー関数でラベルを「終了」に設定します。

于 2013-01-29T15:40:00.437 に答える