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