GObject イントロスペクションを使用する Gedit 3 用の小さなプラグインを作成しようとしていました。以下に示すコードの関連部分は、ボタンのコールバック内の関数に適合できる環境を構築することを目的としています。ただし、ボタンのアクセラレータが機能していません。
- このコードの何が問題になっていますか?
ここのチュートリアルとここの GTK 3 の python ドキュメントを使用しています。あなたが知っている他のリンクはありますか?
from gi.repository import Gtk, Gedit, GObject ui_string = """<ui> <toolbar name="ToolBar"> <separator /> <toolitem name="Test" action="Test" /> </toolbar> </ui> """ class test: def __init__(self, plugin, window): self.window = window self.plugin = plugin self.ui_id = None manager = self.window.get_ui_manager() action_group = Gtk.ActionGroup("TestPluginactions") action_test_button = Gtk.Action(name="Test", label="Test", tooltip="Test", stock_id=Gtk.STOCK_EXECUTE) action_test_button.connect("activate", self.testcallback) action_group.add_action_with_accel(action_test_button, "<Ctrl>l") manager.insert_action_group(action_group, -1) self.ui_id = manager.add_ui_from_string(ui_string) manager.ensure_update() def deactivate(self): manager = self.window.get_ui_manager() manager.remove_ui(self.ui_id) self.ui_id = None self.window = None self.plugin = None def testcallback(self,unused): dialog1 = Gtk.MessageDialog(self.window,Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.ERROR,Gtk.ButtonsType.OK,"TEST") dialog1.run() dialog1.destroy() class WindowActivatable(GObject.Object, Gedit.WindowActivatable): window = GObject.property(type=Gedit.Window) def __init__(self): GObject.Object.__init__(self) self.instances = {} def do_activate(self): self.instances[self.window] = test(self, self.window) def do_deactivate(self): if self.window in self.instances: self.instances[self.window].deactivate()