tamanegiの日記: wxPythonめも(8)
メニューバーの項目を開くイベントを拾って、状況に応じてメニュー項目を
enable/disable するようにしようと思った。
が、どうもそのようなイベントは存在しないという事実が判明(したような気がする)
ただ、一応色々ごにょごにょするとできることはできるらしい。
# かなり古いけどコレとか
File とか Edit みたいなメニューを開くイベント直接ではなくて EVT_UPDATE_UI
イベント内で行えば良い、ということらしい。これは読んで字のごとくUI が
更新される度に呼ばれるみたい。
EVT_UPDATE_UI は Window とその派生クラスが受け付けるものみたい(なんだけど
ドキュメントにそれが書いてある気がしない)なので、Menu とか MenuItem とかでは
使えない。MenuBar は Window の派生クラスなので受け付けてくれる。
# ちなみに、Bind する時に id=xrc.XRCID で指定したらうまくいかなかった。
# id 指定ではダメらしい
で、MenuBar の EVT_UPDATE_UI にハンドラを割り当ててみたんだけど、この
イベントはメニューを展開した時はもちろん、メニューと全然関係ないところを
カーソルが動いてるだけでも呼ばれてることに気づいた。
個々の処理的には大したことはないけど、チリも積もればなんとやらで結構無駄が
多い。top でモニタしてみたところ、数パーセントくらい CPU を無駄に使ってた。
ダメってほどではないけど、気持ち悪いなぁ。別の手段を考えたほうがよさそう。
まぁメニューを開く以前の段階でこまめにon/offを設定すればいいからなんとかは
なるんだけどめんどくさい。
どうにかしてメニューを展開する瞬間を抑えられないのかな。思ってもなかった
ところに解決法があったりしそうなんだけどなぁ。なんとなく。
wxPythonめも(8) More ログイン