2017-10-17 24 views
0

複数の進行状況バーをすばやく表示するプログラムがあります。 wxPython 2.8.12.1ではうまく動作しますが、3.0.2.0にアップデートした後、イベントハンドラが完了するまでプログレスバーが残ります。次のコードは、問題を再現:複数のwxProgressDialogインスタンスが3.0.2.0でオーバーラップしています

import wx 
import time 

class MyFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 

     button = wx.Button(self, -1, 'Test') 

     self.Bind(wx.EVT_BUTTON, self._onTestClick, button) 

    def _onTestClick(self, event): 

     for i in range(5): 

      dlg = wx.ProgressDialog('Progress', 'Testing...', 100, self) 

      for j in range(100): 
       time.sleep(0.01) 
       dlg.Update(j) 

      dlg.Destroy() 

     event.Skip() 

if __name__ == '__main__': 
    app = wx.App(0) 
    frame = MyFrame() 
    frame.Show() 
    app.MainLoop() 

私はデストロイ()呼び出しの後wx.Yieldを()を追加しようとしたが、それは解決しません。誰も私が古いダイアログを早く消える方法を知っていますか?

答えて

0

違いは、MSWポートがデフォルトでネイティブ進行ダイアログに切り替わり、ネイティブダイアログが真のAPIではなく、ネイティブAPI関数呼び出しのラッパーだけであるためです。 wx.GenericProgressDialogを使用すると、オブジェクトの破棄に関して古い動作を持つ真のwx.Dialogバージョンを取得できます。

+0

ああ、それは意味がある(と動作する)!どうもありがとうございます! – tbsp

関連する問題