パスワードを忘れた? アカウント作成
10614704 journal
Python

tamanegiの日記: wxPythonめも(8)

日記 by tamanegi

メニューバーの項目を開くイベントを拾って、状況に応じてメニュー項目を
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を設定すればいいからなんとかは
なるんだけどめんどくさい。

どうにかしてメニューを展開する瞬間を抑えられないのかな。思ってもなかった
ところに解決法があったりしそうなんだけどなぁ。なんとなく。

過去ログ
いち さん よん ろく なな

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

読み込み中...