モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

PyGiで謎のワーニングに対処する

今試作中の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に対して空のアクセラレーターグループを作って付けて置けば起きないということがわかりました。

f:id:dothiko:20161218214821j:plain

こんなふうですね。実は、アクセラレーターグループって一体何なのかよく分かっていません(^^;

無駄な時間を過ごしてしまった…(汗