我正在使用Python 3和Gtk 3.22.5,我正在尝试将一些现有的菜单代码从Gtk.UiManager
更改为Gtk.Builder
。代码将菜单栏插入到框中。最初,这有效:
menubar = uimanager.get_widget("/MenuBar")
box.pack_start(menubar, False, False, 0)
将菜单定义迁移到构建器XML后,我有:
menubar = builder.get_object("menubar")
box.pack_start(menubar, False, False, 0)
但是类型不匹配:
box.pack_start(menubar, False, False, 0)
TypeError: argument child: Expected Gtk.Widget, but got gi.repository.Gio.Menu
如何从构建器中提取Gtk.Widget?
答案 0 :(得分:0)
很难说,但看起来你的menubar
对象不是菜单栏,而是菜单模型。菜单模型不是小部件,不能打包到盒子中。
您必须使用gtk_menu_bar_new_from_model()
创建菜单栏并将其添加到您的窗口。
或者,如果您将菜单模型XML放在单独的GtkBuilder文件中并将其放在路径gtk/menus.ui
的GResource中,则会自动创建菜单栏,如文档here中所述