我正在尝试使用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
问题是我确实需要获取该字符串。有什么办法可以解决该问题?
我遵循了这些教程: