gpt4 book ai didi

Python GTK3 工具栏加速器不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 11:52:27 25 4
gpt4 key购买 nike

我正在关注 Python GTK+ 3 Tutorial ,我为工具栏操作设置的加速器不起作用。这是一个显示问题的程序,大致基于该教程。有一个带有 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 快捷方式调用回调?

(reference for GTK+ 3add_action_with_accel 已弃用,所以肯定有更好的方法来创建加速器,但文档没有显示方法,我找不到更好的方法教程。)

最佳答案

遇到了同样的问题。我问了一个关于 gtk 3 编程特定于 gedit 插件的类似问题 here .我发现菜单栏快捷方式是唯一有效的。因此,只需引入一个菜单项,它的功能与您的工具项完全相同。保留您的工具项以便为用户提供灵 active ,但不要为其分配任何快捷方式。即 add_action,而不是 add_action_with_accel 就足以将其添加到操作组。

关于Python GTK3 工具栏加速器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com