wxptyhonのカスタムイベントにハマる
最近、wxPythonをいじっているのですが、独自のイベント拡張でハマったのでメモ。
wxのデモに入っているPythonEvent.pyを参考に、イベントの作り方を以下と判断。
やりたいのはCUIからGUIへの強制イベントの発行ですが
試行錯誤の末(というほどでもないが)これはwx.Frameのインスタンスとわかり、やっと動くように。
しかしよく見ると、サブスレッドで命令を実行しても、マウスがGUIを横切るまで変更が実行されてない。
イベントが全くないのでイベントが実行されないのか、再描画されないのが原因かとあたりをつけたのですが、イベントはProcessEventでポストされると即座に実行とマニュアルにはあります。で、wx.FrameにSendSizeEvent()したところ、やっと変更が即座に評価されるようになりました。
結果はこんな関数
ここまでで、半日。道のりは険しい……
wxのデモに入っているPythonEvent.pyを参考に、イベントの作り方を以下と判断。
やりたいのはCUIからGUIへの強制イベントの発行ですが
- wx.NewEventType()でイベントタイプをつくる
- wx.PyEventBinder(...)で1のイベントのバインダーを作る
- wx.PyCommandEventのサブクラスに、イベントに渡したい変数を設定
- 3のクラスのインスタンスを作り変数をセット
- イベントハンドラーのProcessEvent(…)に4のイベントを渡す
試行錯誤の末(というほどでもないが)これはwx.Frameのインスタンスとわかり、やっと動くように。
しかしよく見ると、サブスレッドで命令を実行しても、マウスがGUIを横切るまで変更が実行されてない。
イベントが全くないのでイベントが実行されないのか、再描画されないのが原因かとあたりをつけたのですが、イベントはProcessEventでポストされると即座に実行とマニュアルにはあります。で、wx.FrameにSendSizeEvent()したところ、やっと変更が即座に評価されるようになりました。
結果はこんな関数
def que_event(event_args):
evt = MyEvent()
evt.set_event_values(event_args)
frame.ProcessEvent(evt)
frame.SetSizeEvent()
ここまでで、半日。道のりは険しい……
Comments