Как отобразить ускоритель для 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 выполнять ту же роль.

Другие вопросы по тегам