如何从Python Gtk3 +中的Gtk.Builder中提取Gtk.Widget?

时间:2017-02-21 12:50:37

标签: python gtk3

我正在使用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?

1 个答案:

答案 0 :(得分:0)

很难说,但看起来你的menubar对象不是菜单栏,而是菜单模型。菜单模型不是小部件,不能打包到盒子中。

您必须使用gtk_menu_bar_new_from_model()创建菜单栏并将其添加到您的窗口。

或者,如果您将菜单模型XML放在单独的GtkBuilder文件中并将其放在路径gtk/menus.ui的GResource中,则会自动创建菜单栏,如文档here中所述