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

Reply via email to