Как отобразить ускоритель для Gio.MenuItem
Я пытаюсь отобразить комбинацию клавиш для Gio.Menuitem
Как видите, пункт меню RandomAlbum не отображает ускоритель - однако я добавил добавленный ускоритель и успешно подключил его к Gio.MenuItem, поскольку элемент меню реагирует на сочетание клавиш Alt + Z
Фрагмент кода, который я использую, выглядит следующим образом:
action = Gio.SimpleAction.new(action_name, None)
app = Gio.Application.get_default()
app.add_accelerator("<alt>Z", "app."+action_name, None)
item = Gio.MenuItem()
item.set_detailed_action('app.' + action_name)
item.set_label("RandomAlbum")
app.add_plugin_menu_item('tools', "unique name", item)
Есть идеи, почему ускоритель не отображается - но все равно реагирует на управление с клавиатуры?
Полный источник здесь:
1 ответ
Недостающий фрагмент этой головоломки понимает, что сами Gio.MenuItems имеют значения атрибутов.
Поэтому в этом случае перед добавлением пункта меню в GMenu требуется следующий синтаксис:
item.set_attribute_value("accel", GLib.Variant("s", "<Alt>Z"))
Чтобы завершить ответ, вы также можете установить метку и действие для пункта меню следующим образом:
item = Gio.MenuItem () item.set_attribute_value ("label", GLib.Variant ("s", "RandomAlbum")) item.set_attribute_value ("action", GLib.Variant ("s", "app." + action_name))
Однако методы set_label
а также set_detailed_action
выполнять ту же роль.