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 bacci982 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 bacci982 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 buhtz 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-world.py.html.en Nice to know. Very helpful.For C you can check https://github.com/cecashon/OrderedSetVelociRaptor/blob/master/Misc/Csamples/gtk_app1.cwhich 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