2012-03-10 3 views
0

ウィンドウがロードされた後にいくつかのコードを実行したい。私はEVT_OPENEVT_CLOSEと反対に使って、これを行うことを想像しました。
私は、ウィンドウがロードされた後に実行しなければならないコードがあり、そのウィンドウ内のゲージを更新します。したがって、私はフレームの__init__でそれを実行することはできません。これはどうすればいいですか?EVT_OPENのようなものwxPython

答えて

0

あなたは、このイベントはショーと非表示の両方のために発生することに注意してくださいEVT_SHOW

http://www.wxpython.org/docs/api/wx.ShowEvent-class.html

を試すことができます - あなたは、発生したイベントを決定するためにGetShowを呼び出す必要があります。

それとも、このような何かを行うことができます:

wx.CallAfter(self.update_gauge)で(例えば)あなたの__init__

私はあなたの答えを試してみました
+0

wx.CallAfter()がうまくいきました。 – BrtH

0

あります。EVT_WINDOW_CREATEです。ドキュメントから: "EVT_WINDOW_CREATEイベントは、ウィンドウオブジェクト(基本GUIオブジェクト)が存在するとすぐに送信されます。"

+0

が、それは動作しません。フレームの '__init__'で' self.Bind(wx.EVT_WINDOW_CREATE、self.onStartUp) 'を使用しましたが、' onStartUp'は決して実行しません。 – BrtH

+0

もちろん、どのように動作しているかは、使用方法によって異なります。このようなことをすると、たとえば、ウィンドウを作成した後にハンドラをバインドするのは簡単で、ウィンドウが既に作成されているためハンドラは呼び出されません。通常のルートではなく、PreWindow、Create、およびPostCreateを使用することをお勧めします。たとえば、http://wiki.wxpython.org/TwoStageCreationを参照してください。私はEVT_WINDOW_CREATEがあなたが望んだことだと思っていますが、それをどのように使う必要があるかを判断し、それが最良のアプローチかどうかを判断するために、あなたが望むものについてもっと知る必要があります。 – tom10

+0

この説明をありがとうございますが、結局のところ 'wx.CallAfter()'を使用しました。これは正常に動作することが判明し、なぜ私はそれを必要以上に複雑にするのでしょうか? – BrtH

関連する問題