[英]Accel not working in gedit 3 plugin
我試圖為Gedit 3編寫一個使用GObject內省的小插件。 下面顯示的代碼的相關部分只是為了獲得一個環境,然后我可以在按鈕的回調中適應函數。 但是,按鈕的加速器不起作用。
我使用的教程這里和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()
要知道GTK 3有一些錯誤,不允許以上面顯示的方式將快捷方式分配給工具品。 但菜單項工作正常。 所以下面的代碼更好。
from gi.repository import Gtk, Gedit, GObject
ui_string = """<ui>
<toolbar name="ToolBar">
<separator />
<toolitem name="Test" action="Test" />
</toolbar>
<menubar name="MenuBar">
<menu name="ToolsMenu" action="Tools">
<placeholder name="ToolsOps_2">
<menuitem name="test1" action="test1"/>
</placeholder>
</menu>
</menubar>
</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 = Gtk.Action(name="test1",
label="Test",
tooltip="Test",
stock_id=Gtk.STOCK_EXECUTE)
action_test_button.connect("activate", self.testcallback)
action_test.connect("activate", self.testcallback)
action_group.add_action(action_test_button)
action_group.add_action_with_accel(action_test, "<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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.