今試作中のMypaint向けスタンプツールでポップアップメニューをgladeで作るように変更しました (以前はコードから作ってたけど、見通しが悪いので)
それでいろいろ試行錯誤した結果、Gtk.ActionGroupでアクションを作って、このアクションからcreate_menu_itemでメニューアイテムを作ってしまうのが手っ取り早いという結論に達しました。 (pygiからはget_actionが無いとか色々ありまして…)
actgroup = builder.get_object("actiongroup1") for i, ca in enumerate(actgroup.list_actions()): nm = ca.create_menu_item() nm.show() self.menu2.insert(nm, i)
こんなような感じのコードで複数のpopup menu間の共有メニューをinsertしていくような感じですね。
しかし、そうしているとこのような謎のワーニングが大量に出るはめに。
Gtk-CRITICAL **: gtk_accel_label_set_accel_closure: assertion 'gtk_accel_group_from_accel_closure (accel_closure) != NULL' failed
なんのこっちゃ?といろいろ調べてもよくわからない。
最終的にgladeでActionGroupに対して空のアクセラレーターグループを作って付けて置けば起きないということがわかりました。
こんなふうですね。実は、アクセラレーターグループって一体何なのかよく分かっていません(^^;
無駄な時間を過ごしてしまった…(汗