Blame platform-demos/es/menubar.py.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="menubar.py" xml:lang="es">
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">MenuBar (Python)</title>
Packit 1470ea
  <link type="guide" xref="beginner.py#menu-combo-toolbar"/>
Packit 1470ea
  <link type="seealso" xref="gmenu.py"/>
Packit 1470ea
    <link type="next" xref="colorbutton.py"/>
Packit 1470ea
    <revision version="0.1" date="2012-08-01" status="stub"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Marta Maria Casetti</name>
Packit 1470ea
      <email its:translate="no">mmcasetti@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Un widget que contiene widgets «GtkMenuItem»</desc>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Daniel Mustieles</mal:name>
Packit 1470ea
      <mal:email>daniel.mustieles@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2011 - 2017</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Nicolás Satragno</mal:name>
Packit 1470ea
      <mal:email>nsatragno@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012 - 2013</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  
Packit 1470ea
    <mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
Packit 1470ea
      <mal:name>Jorge González</mal:name>
Packit 1470ea
      <mal:email>jorgegonz@svn.gnome.org</mal:email>
Packit 1470ea
      <mal:years>2011</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Una barra de menú creada usando XML y GtkBuilder.</title>
Packit 1470ea
  <media type="image" mime="image/png" src="media/menubar.png"/>
Packit 1470ea
  

Una barra de menú usando XML y GtkBuilder.

Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="xml"> <title>Crear una barra de menú usando XML</title>
Packit 1470ea
   

Para crear la barra de menú usando XML:

Packit 1470ea
   <steps>
Packit 1470ea
     <item>

Cree <file>menubar.ui</file> usando su editor de texto favorito.

</item>
Packit 1470ea
     <item>

Añada la siguiente línea en la parte superior del archivo:

Packit 1470ea
           
Packit 1470ea
<?xml version="1.0"? encoding="UTF-8"?>
Packit 1470ea
     </item>
Packit 1470ea
    <item>

Se quiere crear la interfaz que contendrá la barra de menú y sus submenús. Su barra de menú contendrá los submenús <gui>File</gui>, <gui>Edit</gui>, <gui>Choices</gui> y <gui>Help</gui>. Se le añade el siguiente código XML al archivo:

Packit 1470ea
    <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
     </item>
Packit 1470ea
     <item>

Ahora se crea el archivo .py y se usa «GtkBuilder» para importar el <file>menubar.ui</file> que acaba de crear.

</item>
Packit 1470ea
   </steps>
Packit 1470ea
   </section>
Packit 1470ea
Packit 1470ea
   <section id="basis"> <title>Añadir la barra de menú a la ventana usando «GtkBuilder»</title>
Packit 1470ea
from gi.repository import Gtk
Packit 1470ea
import sys
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyWindow(Gtk.ApplicationWindow):
Packit 1470ea
Packit 1470ea
    def __init__(self, app):
Packit 1470ea
        Gtk.Window.__init__(self, title="MenuBar Example", application=app)
Packit 1470ea
        self.set_default_size(200, 200)
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyApplication(Gtk.Application):
Packit 1470ea
Packit 1470ea
    def __init__(self):
Packit 1470ea
        Gtk.Application.__init__(self)
Packit 1470ea
Packit 1470ea
    def do_activate(self):
Packit 1470ea
        win = MyWindow(self)
Packit 1470ea
        win.show_all()
Packit 1470ea
Packit 1470ea
    def do_startup(self):
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
        # a builder to add the UI designed with Glade to the grid:
Packit 1470ea
        builder = Gtk.Builder()
Packit 1470ea
        # get the file (if it is there)
Packit 1470ea
        try:
Packit 1470ea
            builder.add_from_file("menubar_basis.ui")
Packit 1470ea
        except:
Packit 1470ea
            print("file not found")
Packit 1470ea
            sys.exit()
Packit 1470ea
Packit 1470ea
        # we use the method Gtk.Application.set_menubar(menubar) to add the menubar
Packit 1470ea
        # to the application (Note: NOT the window!)
Packit 1470ea
        self.set_menubar(builder.get_object("menubar"))
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea

Ahora ejecute la aplicación de Python. Se debería ver como la imagen en la parte superior de esta página.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="xml2"> <title>Añadir elementos a los menús</title>
Packit 1470ea

Se empieza añadiendo 2 elementos al menú <gui>File</gui>: <gui>New</gui> y <gui>Quit</gui>. Esto se hace añadiéndole una section al submenú File con estos elementos. El <file>menubar.ui</file> debe verse así (líneas 6 a 13 inclusive conforman la sección nueva):

Packit 1470ea
Packit 1470ea
   <listing>
Packit 1470ea
      <title>menubar.ui</title>
Packit 1470ea
      
Packit 1470ea
<?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name ="label">Quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
</listing>
Packit 1470ea
Packit 1470ea
  

De esta misma manera puede añadirle un elemento Copy y uno Paste al submenú Edit, y un elemento About al submenú Help.

Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="actions">
Packit 1470ea
    <title>Configurar las acciones</title>
Packit 1470ea
Packit 1470ea
    

Ahora se crean las acciones para «New» y «Quit», conectadas a una función de retorno de llamada en el archivo de Python; por ejemplo se crea «new» así:

Packit 1470ea
    
Packit 1470ea
new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
new_action.connect("activate", self.new_callback)
Packit 1470ea
Packit 1470ea
    

Y se crea la función de retorno de llamada de «new» como

Packit 1470ea
    
Packit 1470ea
def new_callback(self, action, parameter):
Packit 1470ea
    print "You clicked \"New\""
Packit 1470ea
Packit 1470ea
    

Ahora, en el archivo XML, se conectan los elementos del menú a las acciones en el archivo XML añadiendo el atributo «action»:

Packit 1470ea
    
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">New</attribute>
Packit 1470ea
  <attribute name="action">app.new</attribute>
Packit 1470ea
</item>
Packit 1470ea
Packit 1470ea
    

Tenga en cuenta que para una acción relativa a la aplicación, se usa el prefijo app.; para acciones relativas a la ventana, se usa el prefijo win..

Packit 1470ea
Packit 1470ea
    

Finalmente, en el archivo de Python, se añade la acción a la aplicación o a la ventana: por ejemplo app.new se añadirá a la aplicación en el método do_startup(self) así:

Packit 1470ea
    
Packit 1470ea
self.add_action(new_action)
Packit 1470ea
Packit 1470ea
    

Consulte la <link xref="signals-callbacks.py"/> para obtener una explicación más detallada sobre señales y retornos de llamada.

Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="win-app"><title>Acciones: ¿aplicación o ventana?</title>
Packit 1470ea
    

Anteriormente, se crearon las acciones «new» y «open» como parte de la clase «MyApplication». Las acciones que controlan la aplicación en sí, como «quit» deben crearse de manera similar.

Packit 1470ea
Packit 1470ea
    

Algunas acciones, como «copy» y «paste» trabajan con la ventana, no con la aplicación. Las acciones de ventanas deben crearse como parte de la clase de la ventana.

Packit 1470ea
Packit 1470ea
    

Los archivos de ejemplo completos contienen tanto acciones de aplicación como de ventana. Estas últimas son generalmente también las incluidas en el <link xref="gmenu.py">menú de la aplicación</link>. No es una buena práctica incluir acciones de ventana en el menú de la aplicación. Con motivo de demostración, los archivos de ejemplo completos incluyen XML en el archivo de IU que crea el menú de la aplicación incluyendo elementos «New» y «Open», y estos están vinculados a las mismas acciones que los elementos de la barra de menú del mismo nombre.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="choices">
Packit 1470ea
    <title>Submenú «choices» y elementos con estado</title>
Packit 1470ea
    <media type="image" mime="image/png" src="media/menubar_choices.png"/>
Packit 1470ea
    

Las líneas 30 a 80 inclusive del <link xref="menubar.py#xml-code"/> demuestran el código XML usado para crear la IU del menú <gui>Choices</gui>.

Packit 1470ea
Packit 1470ea
    

Las acciones creadas hasta ahora no tienen estado, esto significa que no mantienen o dependen de un estado dado por la acción en sí. Las acciones que necesita crear para el submenú «Choices», por otro lado, tienen estado. Un ejemplo de creación de una acción con estado es:

Packit 1470ea
    
Packit 1470ea
shape_action = Gio.SimpleAction.new_stateful("shape", GLib.VariantType.new('s'), GLib.Variant.new_string('line'))
Packit 1470ea
Packit 1470ea
    

donde las variables del método son: nombre, tipo de parámetro (en este caso, una cadena: consulte <link href="http://developer.gnome.org/glib/unstable/glib-GVariantType.html">aquí</link> para una lista completa de significados de caracteres), estado inicial (en este caso, «line»; en el caso de un valor booleano True debería ser Glib.Variant.new_boolean(True), y así sucesivamente, consulte <link href="http://developer.gnome.org/glib/unstable/glib-GVariant.html">aquí</link> para ver una lista completa).

Packit 1470ea
Packit 1470ea
    

Después de haber creado la «SimpleAction» con estado se conecta a su función de retorno de llamada y se añade a la ventana (o la aplicación, si es el caso), como antes:

Packit 1470ea
Packit 1470ea
    
Packit 1470ea
shape_action.connect("activate", self.shape_callback)
Packit 1470ea
self.add_action(shape_action)
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="xml-code">
Packit 1470ea
    <title>Archivo de IU XML completo de este ejemplo</title>
Packit 1470ea
    <?xml version="1.0" encoding="UTF-8"?>
Packit 1470ea
<interface>
Packit 1470ea
  <menu id="menubar">
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">File</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">New</attribute>
Packit 1470ea
          <attribute name="action">app.new</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Quit</attribute>
Packit 1470ea
          <attribute name="action">app.quit</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Edit</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Copy</attribute>
Packit 1470ea
          <attribute name="action">win.copy</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Paste</attribute>
Packit 1470ea
          <attribute name="action">win.paste</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Choices</attribute>
Packit 1470ea
      <submenu>
Packit 1470ea
        <attribute name="label">Shapes</attribute>
Packit 1470ea
          <section>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Line</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">line</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Triangle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">triangle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Square</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">square</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Polygon</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">polygon</attribute>
Packit 1470ea
            </item>
Packit 1470ea
            <item>
Packit 1470ea
              <attribute name="label">Circle</attribute>
Packit 1470ea
              <attribute name="action">win.shape</attribute>
Packit 1470ea
              <attribute name="target">circle</attribute>
Packit 1470ea
            </item>
Packit 1470ea
          </section>
Packit 1470ea
      </submenu>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">On</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">on</attribute>
Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Off</attribute>
Packit 1470ea
          <attribute name="action">app.state</attribute>
Packit 1470ea
          <attribute name="target">off</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">Awesome</attribute>
Packit 1470ea
          <attribute name="action">app.awesome</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
    <submenu>
Packit 1470ea
      <attribute name="label">Help</attribute>
Packit 1470ea
      <section>
Packit 1470ea
        <item>
Packit 1470ea
          <attribute name="label">About</attribute>
Packit 1470ea
          <attribute name="action">win.about</attribute>
Packit 1470ea
        </item>
Packit 1470ea
      </section>
Packit 1470ea
    </submenu>
Packit 1470ea
  </menu>
Packit 1470ea
  <menu id="appmenu">
Packit 1470ea
    <section>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">New</attribute>
Packit 1470ea
        <attribute name="action">app.new</attribute>
Packit 1470ea
      </item>
Packit 1470ea
      <item>
Packit 1470ea
        <attribute name="label">Quit</attribute>
Packit 1470ea
        <attribute name="action">app.quit</attribute>
Packit 1470ea
      </item>
Packit 1470ea
    </section>
Packit 1470ea
  </menu>
Packit 1470ea
</interface>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="python-code">
Packit 1470ea
    <title>Archivo de Python completo de este ejemplo</title>
Packit 1470ea
    from gi.repository import Gtk
Packit 1470ea
from gi.repository import GLib
Packit 1470ea
from gi.repository import Gio
Packit 1470ea
import sys
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyWindow(Gtk.ApplicationWindow):
Packit 1470ea
Packit 1470ea
    def __init__(self, app):
Packit 1470ea
        Gtk.Window.__init__(self, title="MenuBar Example", application=app)
Packit 1470ea
        self.set_default_size(200, 200)
Packit 1470ea
Packit 1470ea
        # action without a state created (name, parameter type)
Packit 1470ea
        copy_action = Gio.SimpleAction.new("copy", None)
Packit 1470ea
        # connected with the callback function
Packit 1470ea
        copy_action.connect("activate", self.copy_callback)
Packit 1470ea
        # added to the window
Packit 1470ea
        self.add_action(copy_action)
Packit 1470ea
Packit 1470ea
        # action without a state created (name, parameter type)
Packit 1470ea
        paste_action = Gio.SimpleAction.new("paste", None)
Packit 1470ea
        # connected with the callback function
Packit 1470ea
        paste_action.connect("activate", self.paste_callback)
Packit 1470ea
        # added to the window
Packit 1470ea
        self.add_action(paste_action)
Packit 1470ea
Packit 1470ea
        # action with a state created (name, parameter type, initial state)
Packit 1470ea
        shape_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "shape", GLib.VariantType.new('s'), GLib.Variant.new_string('line'))
Packit 1470ea
        # connected to the callback function
Packit 1470ea
        shape_action.connect("activate", self.shape_callback)
Packit 1470ea
        # added to the window
Packit 1470ea
        self.add_action(shape_action)
Packit 1470ea
Packit 1470ea
        # action with a state created
Packit 1470ea
        about_action = Gio.SimpleAction.new("about", None)
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        about_action.connect("activate", self.about_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(about_action)
Packit 1470ea
Packit 1470ea
    # callback function for copy_action
Packit 1470ea
    def copy_callback(self, action, parameter):
Packit 1470ea
        print("\"Copy\" activated")
Packit 1470ea
Packit 1470ea
    # callback function for paste_action
Packit 1470ea
    def paste_callback(self, action, parameter):
Packit 1470ea
        print("\"Paste\" activated")
Packit 1470ea
Packit 1470ea
    # callback function for shape_action
Packit 1470ea
    def shape_callback(self, action, parameter):
Packit 1470ea
        print("Shape is set to", parameter.get_string())
Packit 1470ea
        # Note that we set the state of the action!
Packit 1470ea
        action.set_state(parameter)
Packit 1470ea
Packit 1470ea
    # callback function for about (see the AboutDialog example)
Packit 1470ea
    def about_callback(self, action, parameter):
Packit 1470ea
        # a  Gtk.AboutDialog
Packit 1470ea
        aboutdialog = Gtk.AboutDialog()
Packit 1470ea
Packit 1470ea
        # lists of authors and documenters (will be used later)
Packit 1470ea
        authors = ["GNOME Documentation Team"]
Packit 1470ea
        documenters = ["GNOME Documentation Team"]
Packit 1470ea
Packit 1470ea
        # we fill in the aboutdialog
Packit 1470ea
        aboutdialog.set_program_name("MenuBar Example")
Packit 1470ea
        aboutdialog.set_copyright(
Packit 1470ea
            "Copyright \xc2\xa9 2012 GNOME Documentation Team")
Packit 1470ea
        aboutdialog.set_authors(authors)
Packit 1470ea
        aboutdialog.set_documenters(documenters)
Packit 1470ea
        aboutdialog.set_website("http://developer.gnome.org")
Packit 1470ea
        aboutdialog.set_website_label("GNOME Developer Website")
Packit 1470ea
Packit 1470ea
        # to close the aboutdialog when "close" is clicked we connect the
Packit 1470ea
        # "response" signal to on_close
Packit 1470ea
        aboutdialog.connect("response", self.on_close)
Packit 1470ea
        # show the aboutdialog
Packit 1470ea
        aboutdialog.show()
Packit 1470ea
Packit 1470ea
    # a callback function to destroy the aboutdialog
Packit 1470ea
    def on_close(self, action, parameter):
Packit 1470ea
        action.destroy()
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyApplication(Gtk.Application):
Packit 1470ea
Packit 1470ea
    def __init__(self):
Packit 1470ea
        Gtk.Application.__init__(self)
Packit 1470ea
Packit 1470ea
    def do_activate(self):
Packit 1470ea
        win = MyWindow(self)
Packit 1470ea
        win.show_all()
Packit 1470ea
Packit 1470ea
    def do_startup(self):
Packit 1470ea
        # FIRST THING TO DO: do_startup()
Packit 1470ea
        Gtk.Application.do_startup(self)
Packit 1470ea
Packit 1470ea
        # action without a state created
Packit 1470ea
        new_action = Gio.SimpleAction.new("new", None)
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        new_action.connect("activate", self.new_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(new_action)
Packit 1470ea
Packit 1470ea
        # action without a state created
Packit 1470ea
        quit_action = Gio.SimpleAction.new("quit", None)
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        quit_action.connect("activate", self.quit_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(quit_action)
Packit 1470ea
Packit 1470ea
        # action with a state created
Packit 1470ea
        state_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "state",  GLib.VariantType.new('s'), GLib.Variant.new_string('off'))
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        state_action.connect("activate", self.state_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(state_action)
Packit 1470ea
Packit 1470ea
        # action with a state created
Packit 1470ea
        awesome_action = Gio.SimpleAction.new_stateful(
Packit 1470ea
            "awesome", None, GLib.Variant.new_boolean(False))
Packit 1470ea
        # action connected to the callback function
Packit 1470ea
        awesome_action.connect("activate", self.awesome_callback)
Packit 1470ea
        # action added to the application
Packit 1470ea
        self.add_action(awesome_action)
Packit 1470ea
Packit 1470ea
        # a builder to add the UI designed with Glade to the grid:
Packit 1470ea
        builder = Gtk.Builder()
Packit 1470ea
        # get the file (if it is there)
Packit 1470ea
        try:
Packit 1470ea
            builder.add_from_file("menubar.ui")
Packit 1470ea
        except:
Packit 1470ea
            print("file not found")
Packit 1470ea
            sys.exit()
Packit 1470ea
Packit 1470ea
        # we use the method Gtk.Application.set_menubar(menubar) to add the menubar
Packit 1470ea
        # and the menu to the application (Note: NOT the window!)
Packit 1470ea
        self.set_menubar(builder.get_object("menubar"))
Packit 1470ea
        self.set_app_menu(builder.get_object("appmenu"))
Packit 1470ea
Packit 1470ea
    # callback function for new
Packit 1470ea
    def new_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"New\"")
Packit 1470ea
Packit 1470ea
    # callback function for quit
Packit 1470ea
    def quit_callback(self, action, parameter):
Packit 1470ea
        print("You clicked \"Quit\"")
Packit 1470ea
        sys.exit()
Packit 1470ea
Packit 1470ea
    # callback function for state
Packit 1470ea
    def state_callback(self, action, parameter):
Packit 1470ea
        print("State is set to", parameter.get_string())
Packit 1470ea
        action.set_state(parameter)
Packit 1470ea
Packit 1470ea
    # callback function for awesome
Packit 1470ea
    def awesome_callback(self, action, parameter):
Packit 1470ea
        action.set_state(GLib.Variant.new_boolean(not action.get_state()))
Packit 1470ea
        if action.get_state().get_boolean() is True:
Packit 1470ea
            print("You checked \"Awesome\"")
Packit 1470ea
        else:
Packit 1470ea
            print("You unchecked \"Awesome\"")
Packit 1470ea
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="mnemonics-and-accelerators"><title>Atajos y aceleradores</title>
Packit 1470ea
    

Las etiquetas pueden contener atajos. Los atajos son caracteres subrayados en la etiqueta, usados para navegar con el teclado. Se crean poniendo un guión bajo antes del carácter de atajo. Por ejemplo «_Archivo» en lugar de solo «Archivo» en el atributo «label» del «menubar.ui».

Packit 1470ea
   

Los atajos son visibles cuando pulsa la tecla <key>Alt</key>. Presionar <keyseq><key>Alt</key><key>A</key></keyseq> abrirá el menú <gui>Archivo</gui>.

Packit 1470ea
Packit 1470ea
    

Los aceleradores pueden añadirse explícitamente en las definiciones de la IU. Por ejemplo, es común poder cerrar una aplicación presionando <keyseq><key>Ctrl</key><key>Q</key></keyseq> o guardar un archivo presionando <keyseq><key>Ctrl</key><key>S</key></keyseq>. Para añadir un acelerador a la definición de IU, simplemente añádale un atributo «accel» al elemento.

Packit 1470ea

<attribute name="accel">&lt;Primary&gt;q</attribute> creará la secuencia <keyseq><key>Ctrl</key><key>Q</key></keyseq> cuando se añada al elemento de la etiqueta Quit. Aquí, «Primary» se refiere a la tecla <key>Ctrl</key> en una PC o <key>⌘</key> en una Mac.

Packit 1470ea
Packit 1470ea
  
Packit 1470ea
<item>
Packit 1470ea
  <attribute name="label">_Quit</attribute>
Packit 1470ea
  <attribute name="action">app.quit</attribute>
Packit 1470ea
  <attribute name="accel">&lt;Primary&gt;q</attribute>
Packit 1470ea
</item>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="translatable"><title>Cadenas traducibles</title>
Packit 1470ea
   

Dado que las aplicaciones de GNOME se traducen a <link href="http://l10n.gnome.org/languages/">muchos idiomas</link>, es importante que las cadenas en su aplicación puedan traducirse. Para hacer una etiqueta traducible, simplemente añada translatable="yes":

Packit 1470ea
Packit 1470ea
     <attribute name="label" translatable="yes">Quit</attribute>
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
  <section id="references">
Packit 1470ea
    <title>Referencias de la API</title>
Packit 1470ea
    

En este ejemplo se usa lo siguiente:

Packit 1470ea
    <list>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gio/unstable/GSimpleAction.html">GSimpleAction</link>

</item>
Packit 1470ea
      <item>

<link href="http://developer.gnome.org/gtk3/unstable/GtkBuilder.html">GtkBuilder</link>

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </section>
Packit 1470ea
</page>