Python GTK3 工具栏加速键无效
我正在学习Python GTK+ 3 教程,但是我为工具栏动作设置的快捷键不起作用。这里有一个程序展示了这个问题,大致是基于那个教程的。程序里有一个菜单动作的快捷键是N
,还有一个工具栏动作的快捷键是X
。菜单动作的快捷键可以用,工具栏动作的却不行,尽管这两个动作的创建方式是一样的。
from gi.repository import Gtk
UI_INFO = """
<ui>
<menubar name='TestMenubar'>
<menu action='FileMenu'>
<menuitem action='MenuAction' />
</menu>
</menubar>
<toolbar name='TestToolbar'>
<toolitem action='ToolbarAction' />
</toolbar>
</ui>
"""
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Test")
self.set_default_size(200, 100)
action_group = Gtk.ActionGroup(name="test_actions")
self.add_menu_action(action_group)
self.add_toolbar_action(action_group)
uimanager = self.create_ui_manager()
uimanager.insert_action_group(action_group)
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
menubar = uimanager.get_widget("/TestMenubar")
box.pack_start(menubar, False, False, 0)
toolbar = uimanager.get_widget("/TestToolbar")
box.pack_start(toolbar, False, False, 0)
self.add(box)
def add_menu_action(self, action_group):
action_filemenu = Gtk.Action(name="FileMenu", label="File")
action_group.add_action(action_filemenu)
action = Gtk.Action(name='MenuAction',
label="Menu action",
stock_id=Gtk.STOCK_NEW)
action.connect('activate', self.on_menu_action)
action_group.add_action_with_accel(action, 'N')
def add_toolbar_action(self, action_group):
action = Gtk.Action(name='ToolbarAction',
label="Press me",
stock_id=Gtk.STOCK_MEDIA_STOP)
action.connect('activate', self.on_toolbar_action)
action_group.add_action_with_accel(action, 'X')
def on_menu_action(self, widget):
print 'Menu action'
def on_toolbar_action(self, widget):
print 'Toolbar action'
def create_ui_manager(self):
uimanager = Gtk.UIManager()
uimanager.add_ui_from_string(UI_INFO)
self.add_accel_group(uimanager.get_accel_group())
return uimanager
window = MyWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
我该怎么做才能让按下X
快捷键时调用相应的函数呢?
(关于GTK+ 3的参考资料提到add_action_with_accel
这个方法已经不推荐使用了,所以肯定有更好的方法来创建快捷键,但文档里没有说明,我也找不到更好的教程。)
1 个回答
1
我也遇到了同样的问题。我在这里问过一个关于gtk 3编程和gedit插件的类似问题链接。我发现菜单栏的快捷键是唯一有效的。所以你只需要添加一个菜单项,让它的功能和你的工具项一样。保留你的工具项是为了给用户提供更多选择,但不要给它分配任何快捷键。也就是说,使用add_action
就可以了,而不是add_action_with_accel
,这样就能把它添加到操作组里。