绑定到Gio.MenuItem的Gio.SimpleAction-设置parameter_type时不起作用

时间:2018-11-05 12:19:18

标签: python gtk gio

我正在尝试使用Gtk.MenuButton和Gtk.Popover控件创建简单的GTK应用程序。我的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

问题是我确实需要获取该字符串。有什么办法可以解决该问题?

我遵循了这些教程:

0 个答案:

没有答案