# GMenu (Python)

Tiffany Antopolski
tiffany.antopolski@gmail.com 2012
Marta Maria Casetti
mmcasetti@gmail.com 2012
Una implementación sencilla de GMenu
Daniel Mustieles
daniel.mustieles@gmail.com 2011 - 2014
Nicolás Satragno
nsatragno@gmail.com 2012 - 2013
Jorge González
jorgegonz@svn.gnome.org 2011

# GMenu

Una GtkApplication con un GMenu sencillo y SimpleActions

# Código usado para generar este ejemplo

from gi.repository import Gtk from gi.repository import Gio import sys

class MyWindow(Gtk.ApplicationWindow):

def __init__(self, app): Gtk.Window.__init__(self, title="GMenu Example", application=app)

class MyApplication(Gtk.Application):

def __init__(self): Gtk.Application.__init__(self)

def do_activate(self): win = MyWindow(self) win.show_all()

def do_startup(self): # start the application Gtk.Application.do_startup(self)

# create a menu menu = Gio.Menu() # append to the menu three options menu.append("New", "app.new") menu.append("About", "app.about") menu.append("Quit", "app.quit") # set the menu as menu of the application self.set_app_menu(menu)

# create an action for the option "new" of the menu new_action = Gio.SimpleAction.new("new", None) # connect it to the callback function new_cb new_action.connect("activate", self.new_cb) # add the action to the application self.add_action(new_action)

# option "about" about_action = Gio.SimpleAction.new("about", None) about_action.connect("activate", self.about_cb) self.add_action(about_action)

# option "quit" quit_action = Gio.SimpleAction.new("quit", None) quit_action.connect("activate", self.quit_cb) self.add_action(quit_action)

# callback function for "new" def new_cb(self, action, parameter): print "This does nothing. It is only a demonstration."

# callback function for "about" def about_cb(self, action, parameter): print "No AboutDialog for you. This is only a demonstration."

# callback function for "quit" def quit_cb(self, action, parameter): print "You have quit." self.quit()

app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

# Métodos útiles para una «GSimpleAction» y un GMenu

En la línea 33, la señal `«activate»` de la acción `new_action` (no el menú) se conecta a la función de retorno de llamada `new_cb()` usando `action.connect(señal, función de retorno de llamada)`. Consulte la para obtener una explicación más detallada.

Métodos útiles para una «GSimpleAction»:

Para crear una acción nueva que no dependa del estado, es decir, una acción que no retenga o dependa de un estado dado a la acción en sí, use

action = Gio.SimpleAction.new("name", parameter_type)

donde `"name"` es el nombre de la acción y `parameter_type` es el tipo de parámetro que recibe la acción cuando se activa. Este puede ser `None`, o `GLib.VariantType.new('s')` si el parámetro es del tipo `str`, o en lugar de `'s'` un carácter como se describe aquí. Para crear una acción nueva con estado, use

action = Gio.SimpleAction.new_stateful("name", parameter_type, initial_state)

donde `initial_state` está definido como una GVariant: por ejemplo `Glib.Variant.new_string('start')`; para una lista de posibilidades consulte aquí.

`set_enabled(True)` configura la acción como habilitada; una acción debe habilitarse para poder activarse o para que llamantes exteriores cambien su estado. Sólo el que implementa la acción debe llamarlo. Los usuarios de la acción no deben intentar modificar su opción «enabled».

`set_state(estado)`, donde `estado` es una GVariant, establece el estado de la acción, actualizando la propiedad «state» a un valor dado. Sólo el que implementa la acción debe llamarlo; los usuarios de la acción, en cambio, deben llamar a `change_state(estado)` (donde `estado` es como se mencionó) para solicitar el cambio.

Métodos útiles para un GMenu:

Para insertar un elemento en el menú en una `posición`, use `insert(posición, etiqueta, acción_detallada)`, donde `etiqueta` es la etiqueta que aparecerá en el menú y `acción_detallada` es una cadena compuesta por el nombre de la acción a la que se la agrega el prefijo `app.`. Puede encontrar una discusión más detallada de esto en la .

Para agregar o anteponer un elemento en el menú use respectivamente `append(etiqueta, acción_detallada)` y `prepend(etiqueta, acción_detallada)`.

Otra manera de añadir elementos al menú es crearlos como `GMenuItem` y usar `insert_item(posición, elemento)`, `append_item(elemento)`, o `prepend_item(elemento)`; por lo que por ejemplo se podría tener:

about = Gio.MenuItem.new("About", "app.about") menu.append_item(about)

También se puede añadir una subsección completa a un menú usando `insert_section(posición, etiqueta, sección)`, `append_section(etiqueta, sección)`, o `prepend_section(etiqueta, sección)`, donde `etiqueta` es el título de la subsección.

Para añadir un submenú que se expanda y colapse, use `insert_submenu(posición, etiqueta, sección)`, `append_submenu(etiqueta, sección)`, o `prepend_submenu(etiqueta, sección)`, donde `etiqueta` es el título de la subsección.

Para eliminar un elemento del menú, use `remove(posición)`.

Para establecer una etiqueta para el menú, use `set_label(etiqueta)`.

# Referencias de la API

En este ejemplo se usa lo siguiente:

GMenu

GSimpleAction

GVariantType

GVariant