Gio.SimpleAction, привязанное к Gio.MenuItem - не работает, если установлен параметр_тип - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь создать простое приложение GTK с элементами управления Gtk.MenuButton и Gtk.Popover. Мой файл Glade выглядит нормально, однако я не знаю, как правильно вызывать действие при нажатии на пункт меню.

Вот пример кода:

class App(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(self)
        self.window = None

        self.builder = Gtk.Builder()
        self.builder.add_from_file("main.ui")
        self.builder.connect_signals(self)

    def do_activate(self):
        if not self.window:
            self.window = self.builder.get_object("application_window")
            self.window.set_application(self)
            self.window.show()
        else:
            self.window.present()

    def on_application_window_show(self, widget):
        menu = Gio.Menu()
        menu.append("test_item", "win.test_item")

        variant = GLib.Variant.new_string("test_item")
        variant_type = variant.get_type()

        test_item_action = Gio.SimpleAction.new_stateful("test_item", variant_type, variant)
        test_item_action.connect("activate", self.test_item_method)
        self.window.add_action(test_item_action)

        interface_popover = self.builder.get_object("interface_popover")
        interface_popover.bind_model(menu)

    def test_item_method(self, action, value):
        print("Test method:", action, value)

Как видите, я пытаюсь добавить один пункт меню. Однако, когда я запускаю свое приложение, я не могу щелкнуть по вновь добавленному элементу (он даже не подсвечивается при наведении на него мыши). Ну, нет никаких предупреждений / ошибок / исключений в консоли Python. Кажется, я не понимаю, как на самом деле работают SimpleAction.

Самое интересное, что когда я устанавливаю variant_type на None, элемент активируется, моя пользовательская функция вызывается успешно, но ничего не возвращается:

Test method: <Gio.SimpleAction object at ... (GSimpleAction at ...)> None

Проблема в том, что мне действительно нужно получить эту строку. Есть ли способ исправить эту проблему?

Я следовал этим урокам:

...