How To Create A Complete Menu Using Gio Actions In Pygi Gtk?
I'm trying to convert the menubar in my Gtk app so it will use GActions(from the Gio) as opposed of GtkActions in Python3 using GObject Instrospection. I've been trying to figure i
Solution 1:
A menubar is added now.
#!/usr/bin/env python3
# Copyright (C) 2013 LiuLang <gsushzhsosgsu@gmail.com>
# Use of this source code is governed by GPLv3 license that can be found
# in http://www.gnu.org/licenses/gpl-3.0.html
from gi.repository import Gio
from gi.repository import Gtk
import sys
menus_str ='''
<?xml version="1.0"?>
<interface>
<menu id="appmenu">
<section>
<item>
<attribute name="label" translatable="yes">Preferences</attribute>
<attribute name="action">app.preferences</attribute>
</item>
</section>
<section>
<item>
<attribute name="label" translatable="yes">About</attribute>
<attribute name="action">app.about</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Quit</attribute>
<attribute name="action">app.quit</attribute>
<attribute name="accel"><Primary>q</attribute>
</item>
</section>
</menu>
<menu id="menubar">
<submenu>
<attribute name="label">_Help</attribute>
<section>
<item>
<attribute name="label">_About</attribute>
<attribute name="action">app.about</attribute>
</item>
</section>
</submenu>
</menu>
</interface>
'''
class App:
def __init__(self):
self.app = Gtk.Application.new('org.liulang.test', 0)
self.app.connect('startup', self.on_app_startup)
self.app.connect('activate', self.on_app_activate)
self.app.connect('shutdown', self.on_app_shutdown)
def run(self, argv):
self.app.run(argv)
def on_app_startup(self, app):
self.window = Gtk.ApplicationWindow.new(app)
self.window.set_default_size(640, 480)
self.window.set_title('Gio Actions Demo')
self.window.set_border_width(5)
# no need to connect delete-event/destroy signal
app.add_window(self.window)
label = Gtk.Label('Hello, Gtk3')
self.window.add(label)
label.props.halign = Gtk.Align.CENTER
label.props.valign = Gtk.Align.CENTER
builder = Gtk.Builder()
# It is better to load ui from a seperate file
builder.add_from_string(menus_str)
builder.connect_signals(self)
appmenu = builder.get_object('appmenu')
app.set_app_menu(appmenu)
menubar = builder.get_object('menubar')
app.set_menubar(menubar)
self.add_simple_action('preferences',
self.on_action_preferences_activated)
self.add_simple_action('about', self.on_action_about_activated)
self.add_simple_action('quit', self.on_action_quit_activated)
def on_app_activate(self, app):
self.window.show_all()
def on_app_shutdown(self, app):
# do some cleaning job here, like dumping configuration.
pass
def on_action_preferences_activated(self, action, user_data):
print('will popup preferences dialog')
def on_action_about_activated(self, action, user_data):
print('will show about dialog')
def on_action_quit_activated(self, action, user_data):
# This will close the default gtk mainloop
self.app.quit()
def add_simple_action(self, name, callback):
action = Gio.SimpleAction.new(name, None)
action.connect('activate', callback)
self.app.add_action(action)
if __name__ == '__main__':
app = App()
app.run(sys.argv)
Post a Comment for "How To Create A Complete Menu Using Gio Actions In Pygi Gtk?"