Hi, I did test it out, here's a working version: import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import Gio
class Window(Gtk.ApplicationWindow): def __init__(self): Gtk.Window.__init__(self) self.set_default_size(200, 100) # self.interface_info = """ <interface> <menu id='TheMenuModel'> <submenu> <attribute name='label'>Foo</attribute> <item> <attribute name='label'>Bar</attribute> <attribute name='action'>win.bar</attribute> </item> </submenu> </menu> </interface> """ builder = Gtk.Builder.new_from_string(self.interface_info, -1) action_bar = Gio.SimpleAction.new('bar', None) action_bar.connect('activate', self.on_menu) self.add_action(action_bar) menumodel = builder.get_object('TheMenuModel') menubar = Gtk.MenuBar.new_from_model(menumodel) # layout self.layout = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.layout.pack_start(menubar, False, False, 0) self.add(self.layout) self.connect('destroy', Gtk.main_quit) self.show_all() def on_menu(self, action, value): print('on_menu') if __name__ == '__main__': win = Window() Gtk.main() 2018-04-26 11:01 GMT+02:00 Luca Bacci <luca.bacci...@gmail.com>: > it should be like that (I can't test it right now, try yourself) > > #!/usr/bin/env python3 > import gi > gi.require_version('Gtk', '3.0') > from gi.repository import Gtk > from gi.repository import Gio > > class Window(Gtk.ApplicationWindow): > def __init__(self): > Gtk.Window.__init__(self) > self.set_default_size(200, 100) > > # > self.interface_info = """ > <interface> > <menu id='TheMenuModel'> > <section> > <attribute name='foo'>Foo</attribute> > <item> > <attribute name='bar'>Bar</attribute> > <attribute name="action">win.bar</attribute> > </item> > </section> > </menu> > </interface> > """ > > builder = Gtk.Builder.new_from_string(self.interface_info, -1) > > action_bar = Gio.SimpleAction.new('bar', None) > action_bar.connect('activate', self.on_menu) > self.add_action(action_bar) > > menumodel = builder.get_object('TheMenuModel') > menubar = Gtk.MenuBar.new_from_model(menumodel) > > # layout > self.layout = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) > self.layout.pack_start(menubar, True, True, 0) > self.add(self.layout) > > self.connect('destroy', Gtk.main_quit) > self.show_all() > > def on_menu(self, action, value): > print('on_menu') > > if __name__ == '__main__': > win = Window() > Gtk.main() > > > 2018-04-26 10:44 GMT+02:00 Luca Bacci <luca.bacci...@gmail.com>: > >> see here: >> >> https://wiki.gnome.org/HowDoI/GMenu >> https://wiki.gnome.org/HowDoI/GAction >> >> self.interface_info = """ >>> <interface> >>> <menu id='TheMenu'> >>> <section> >>> <attribute name='foo'>Foo</attribute> >>> <item> >>> <attribute name='bar'>Bar</attribute> >>> </item> >>> </section> >>> </menu> >>> </interface> >>> """ >> >> >> for every <item> you want to set at least two attributes: "name" and >> "action". it should be >> >> self.interface_info = """ >> <interface> >> <menu id='TheMenuModel'> >> <section> >> <attribute name='foo'>Foo</attribute> >> <item> >> <attribute name='bar'>Bar</attribute> >> <attribute name="action">win.bar</attribute> >> </item> >> </section> >> </menu> >> </interface> >> """ >> >> you get the GMenuModel from the builder >> menumodel = builder.get_object('TheMenuModel') >> and you create a menubar widget from the menumodel: >> >> menubar = Gtk.MenuBar.new_from_model(menumodel) >> >> >> 2018-04-26 7:10 GMT+02:00 <c.bu...@posteo.jp>: >> >>> Dear Eric, >>> >>> thank you for your quick reply. >>> >>> > There is a basic setup for the Gtk Application in Python here >>> > https://developer.gnome.org/gnome-devel-demos/stable/hello-w >>> orld.py.html.en >>> >>> Nice to know. Very helpful. >>> >>> > For C you can check >>> > https://github.com/cecashon/OrderedSetVelociRaptor/blob/mast >>> er/Misc/Csamples/gtk_app1.c >>> > which has a menu but doesn't use builder with an application. Maybe >>> > partial help. >>> >>> This code doesn't help me with my problem but brings up two questions. >>> >>> 1. >>> It uses "QMenu" (from Gtk or Gio?) to build a menu structure. I would >>> prefere this way instead of an XML string. It should be possible >>> in Python, too? Gtk.Menu or Gio.Menu? >>> >>> 2. >>> It uses " gtk_application_set_menubar()" which I don't want to use. >>> Because there is no "gtk_application_set_TOOLBAR()"! I need the menubar >>> and the toolbar as a widget to add them myself to the main window. >>> Or a " gtk_application_set_toolbar()" - don't understand why there >>> isn't one. >>> >>> It couldn't be so hard to create a menubar and a toolbar with >>> PyGObject?! Am I the first one who tries this? ;) >>> _______________________________________________ >>> gtk-app-devel-list mailing list >>> gtk-app-devel-list@gnome.org >>> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list >>> >> >> > _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list