Blame platform-demos/es/hello-world.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="hello-world.py" xml:lang="es">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
  <title type="text">Hola mundo (Python)</title>
Packit 1470ea
    <link type="guide" xref="py#tutorial" group="#first"/>
Packit 1470ea
Packit 1470ea
    <revision version="0.1" date="2013-06-17" status="review"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Susanna Huhtanen</name>
Packit 1470ea
      <email its:translate="no">ihmis.suski@gmail.com</email>
Packit 1470ea
      <years>2012</years>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="editor">
Packit 1470ea
      <name>Tiffany Antopolski</name>
Packit 1470ea
      <email its:translate="no">tiffany.antopolski@gmail.com</email>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <desc>Una aplicación «Hola mundo» básica</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>Cómo construir, instalar y crear un <file>tar.xz</file> de un programa Hola mundo</title>
Packit 1470ea
    <media type="image" mime="image/png" style="floatend" src="media/hello-world.png"/>
Packit 1470ea
    <synopsis>
Packit 1470ea
      

Este tutorial le demostrará cómo:

Packit 1470ea
      <list style="numbered">
Packit 1470ea
        <item>

crear una pequeña aplicación «Hola, mundo» usando Python y GTK+

</item>
Packit 1470ea
        <item>

hacer el archivo <file>.desktop</file>

</item>
Packit 1470ea
        <item>

configurar el sistema de construcción

</item>
Packit 1470ea
      </list>
Packit 1470ea
    </synopsis>
Packit 1470ea
Packit 1470ea
Packit 1470ea
Packit 1470ea
  <links type="section"/>
Packit 1470ea
Packit 1470ea
  <section id="HelloWorld"><title>Crear el programa</title>
Packit 1470ea
Packit 1470ea
    <links type="section"/>
Packit 1470ea
Packit 1470ea
    <section id="imports"><title>Bibliotecas que importar</title>
Packit 1470ea
      from gi.repository import Gtk
Packit 1470ea
import sys
Packit 1470ea
      

Para que su script funcione con GNOME, se deben importar las bibliotecas de GNOME mediante introspección de GObject. En este caso, se están importando las vinculaciones de lenguaje y GTK+, la biblioteca que contiene los widgets gráficos usados para crear aplicaciones de GNOME.

Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
    <section id="mainwindow"><title>Crear la ventana principal de la aplicación</title>
Packit 1470ea
      class MyWindow(Gtk.ApplicationWindow):
Packit 1470ea
Packit 1470ea
    # constructor for a Gtk.ApplicationWindow
Packit 1470ea
    def __init__(self, app):
Packit 1470ea
        Gtk.Window.__init__(self, title="Hello World!", application=app)
Packit 1470ea
        self.set_default_size(200, 100)
Packit 1470ea
Packit 1470ea
class MyApplication(Gtk.Application):
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
    

«Gtk.Application» inicializa GTK+. También conecta el botón <gui>x</gui>, que se genera automáticamente junto con la ventana, a la señal «destroy».

Packit 1470ea
    

Se puede empezar a construir la primera ventana. Esto se hace creando una clase llamada MyWindow y asignándole una «Gtk.ApplicationWindow».

Packit 1470ea
    

Se le asignara una propiedad llamada title. El título puede ser la cadena que quiera pero, para estar seguro, es conveniente que tenga una codificación UTF-8.

Packit 1470ea
    

Ya tiene una ventana que contiene un título y un botón «cerrar» que funciona. Ahora, añada el texto «Hola mundo».

Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
    <section id="label"><title>Etiqueta para la ventana</title>
Packit 1470ea
      # Add a label widget to your window
Packit 1470ea
Packit 1470ea
        # create a label
Packit 1470ea
        label = Gtk.Label()
Packit 1470ea
Packit 1470ea
        # set the text of the label
Packit 1470ea
        label.set_text("Hello GNOME!")
Packit 1470ea
Packit 1470ea
        # add the label to the window
Packit 1470ea
        self.add(label)
Packit 1470ea
Packit 1470ea
      

Una etiqueta de texto es uno de los widgets de GTK+ que puede usar si importó la biblioteca GTK+. Para usarlo, cree una variable nueva llamada label y establezca el texto que la etiqueta contendrá. Finalmente, se crea y ejecuta la aplicación:

Packit 1470ea
Packit 1470ea
      #run the application
Packit 1470ea
Packit 1470ea
app = MyApplication()
Packit 1470ea
exit_status = app.run(sys.argv)
Packit 1470ea
sys.exit(exit_status)
Packit 1470ea
Packit 1470ea
      

«Gtk.ApplicationWindow» sólo puede contener un widget a la vez. Para construir programas más elaborados necesita crear un widget contenedor como «Gtk.Grid» dentro de la ventana, y después añadirle los otros.

Packit 1470ea
   </section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
    <section id="py"><title>hola-mundo.py</title>
Packit 1470ea
      

El archivo completo:

Packit 1470ea
      from gi.repository import Gtk
Packit 1470ea
import sys
Packit 1470ea
Packit 1470ea
Packit 1470ea
class MyWindow(Gtk.ApplicationWindow):
Packit 1470ea
    # constructor for a Gtk.ApplicationWindow
Packit 1470ea
Packit 1470ea
    def __init__(self, app):
Packit 1470ea
        Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
Packit 1470ea
        self.set_default_size(200, 100)
Packit 1470ea
Packit 1470ea
        # create a label
Packit 1470ea
        label = Gtk.Label()
Packit 1470ea
        # set the text of the label
Packit 1470ea
        label.set_text("Hello GNOME!")
Packit 1470ea
        # add the label to the window
Packit 1470ea
        self.add(label)
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
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="terminal"><title>Ejecutar la aplicación desde la terminal</title>
Packit 1470ea
      

Para ejecutar esta aplicación, primero guárdela como hello-world.py. Luego, vaya a la carpeta donde está la aplicación.

Packit 1470ea
      <screen><output style="prompt">$ </output><input>python hola-mundo.py</input></screen>
Packit 1470ea
    </section>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="desktop.in"><title>El archivo <file>.desktop.in</file></title>
Packit 1470ea
      

Ejecutar aplicaciones desde la terminal es útil al principio del proceso de crear la aplicación. Para tener una <link href="https://developer.gnome.org/integration-guide/stable/mime.html.en">integración con la aplicación</link> completa en GNOME 3, se necesita un lanzador en el escritorio. Para esto, necesita crear un archivo <file>.desktop</file>. El archivo «.desktop» describe el nombre de la aplicación, el icono que usa y varios campos de integración. Puede encontrar una descripción de los archivos <file>.desktop</file> <link href="http://developer.gnome.org/desktop-entry-spec/">aquí</link>. El archivo <file>.desktop.in</file> creará el <file>.desktop</file>.

Packit 1470ea
Packit 1470ea
    

El ejemplo muestra los requerimientos mínimos de un archivo .desktop.in.

Packit 1470ea
    [Desktop Entry]
Packit 1470ea
Version=1.0
Packit 1470ea
Encoding=UTF-8
Packit 1470ea
Name=Hello World
Packit 1470ea
Comment=Say Hello
Packit 1470ea
Exec=@prefix@/bin/hello-world
Packit 1470ea
Icon=application-default-icon
Packit 1470ea
Terminal=false
Packit 1470ea
Type=Application
Packit 1470ea
StartupNotify=true
Packit 1470ea
Categories=GNOME;GTK;Utility;
Packit 1470ea
Packit 1470ea
Packit 1470ea
    

Ahora se verán algunas partes del archivo .desktop.in.

Packit 1470ea
    <terms>
Packit 1470ea
      <item><title>Name</title>

El nombre de la aplicación.

</item>
Packit 1470ea
      <item><title>Comment</title>

Una descripción corta de la aplicación.

</item>
Packit 1470ea
      <item><title>Exec</title>

Especifica un comando que ejecutar cuando se elige la aplicación en el menú. En este ejemplo, «exec» sólo indica dónde encontrar el archivo hello-world y el archivo se hace cargo del resto.

</item>
Packit 1470ea
      <item><title>Terminal</title>

Especifica si el comando del campo «Exec» se ejecuta en una ventana de la terminal.

</item>
Packit 1470ea
    </terms>
Packit 1470ea
Packit 1470ea
    

Para incluir su aplicación en la categoría correcta, debe añadir las categorías necesarias a la línea «Categories». Puede encontrar más información sobre las distintas categorías en la <link href="http://standards.freedesktop.org/menu-spec/latest/apa.html">especificación del menú</link>.

Packit 1470ea
    

En este ejemplo se ha usado un icono existente. Para usar un icono personalizado, necesita un archivo «.svg» con su icono guardado en <file>/usr/share/icons/hicolor/scalable/apps</file>. Escriba el nombre del archivo del icono en el archivo «.desktop.in», en la línea 7. Puede obtener más información sobre los iconos en <link href="http://freedesktop.org/wiki/Specifications/icon-theme-spec">Instalar iconos para temas</link>, <link href="https://live.gnome.org/GnomeGoals/AppIcon">Instalar iconos para temas</link> y en <link href="http://freedesktop.org/wiki/Specifications/icon-theme-spec">freedesktop.org: especificaciones/icon-theme-spec</link>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="autotools"><title>El sistema de construcción</title>
Packit 1470ea
    

Para que su aplicación forme parte realmente del sistema GNOME 3 debe instalarla con la ayuda de autotools. La construcción autotools instalará todos los archivos necesarios en las ubicaciones correctas.

Packit 1470ea
    

Para esto deberá tener los siguientes archivos:

Packit 1470ea
    <links type="section"/>
Packit 1470ea
Packit 1470ea
      <section id="autogen"><title>autogen.sh</title>
Packit 1470ea
        #!/bin/sh
Packit 1470ea
Packit 1470ea
set -e
Packit 1470ea
Packit 1470ea
test -n "$srcdir" || srcdir=`dirname "$0"`
Packit 1470ea
test -n "$srcdir" || srcdir=.
Packit 1470ea
Packit 1470ea
olddir=`pwd`
Packit 1470ea
cd "$srcdir"
Packit 1470ea
Packit 1470ea
# This will run autoconf, automake, etc. for us
Packit 1470ea
autoreconf --force --install
Packit 1470ea
Packit 1470ea
cd "$olddir"
Packit 1470ea
Packit 1470ea
if test -z "$NOCONFIGURE"; then
Packit 1470ea
  "$srcdir"/configure "$@"
Packit 1470ea
fi
Packit 1470ea
Packit 1470ea
Packit 1470ea
      

Una vez que el archivo <file>autogen.sh</file> esté listo y guardado, ejecute:

Packit 1470ea
      <screen><output style="prompt">$ </output><input>chmod +x autogen.sh</input></screen>
Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
    <section id="makefile"><title>Makefile.am</title>
Packit 1470ea
      # The actual runnable program is set to the SCRIPTS primitive.
Packit 1470ea
# # Prefix bin_ tells where to copy this
Packit 1470ea
bin_SCRIPTS = hello-world.py
Packit 1470ea
# # List of files to be distributed
Packit 1470ea
EXTRA_DIST=  \
Packit 1470ea
	$(bin_SCRIPTS)
Packit 1470ea
#
Packit 1470ea
#     # The desktop files
Packit 1470ea
desktopdir = $(datadir)/applications
Packit 1470ea
desktop_DATA = \
Packit 1470ea
	hello-world.desktop
Packit 1470ea
Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
    <section id="configure"><title>configure.ac</title>
Packit 1470ea
      # This file is processed by autoconf to create a configure script
Packit 1470ea
AC_INIT([Hello World], 1.0)
Packit 1470ea
AM_INIT_AUTOMAKE([1.10 no-define foreign dist-xz no-dist-gzip])
Packit 1470ea
AC_CONFIG_FILES([Makefile hello-world.desktop])
Packit 1470ea
AC_OUTPUT
Packit 1470ea
Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
    <section id="readme"><title>README</title>
Packit 1470ea
       

Información que los usuarios deben leer primero. Este archivo puede estar vacío.

Packit 1470ea
Packit 1470ea
       

Cuando tenga los archivos <file>hello-world</file>, <file>hello-world.desktop.in</file>, <file>Makefile.am</file>, <file>configure.ac</file> y <file>autogen.sh</file> con la información y los permisos correctos, el archivo <file>README</file> puede incluir las siguientes instrucciones:

Packit 1470ea
      Para construir e instalar este programa:
Packit 1470ea
Packit 1470ea
./autogen.sh --prefix=/home/usuario/.local
Packit 1470ea
make install
Packit 1470ea
Packit 1470ea
-------------
Packit 1470ea
Al ejecutar la primera línea se crean los siguientes archivos:
Packit 1470ea
Packit 1470ea
aclocal.m4
Packit 1470ea
autom4te.cache
Packit 1470ea
config.log
Packit 1470ea
config.status
Packit 1470ea
configure
Packit 1470ea
helloWorld.desktop
Packit 1470ea
install-sh
Packit 1470ea
missing
Packit 1470ea
Makefile.in
Packit 1470ea
Makefile
Packit 1470ea
Packit 1470ea
Al ejecutar «make install», se instala la aplicación en /home/usuario/.local/bin
Packit 1470ea
y se instala el archivo helloWorld.desktop en /home/usuario/.local/share/applications
Packit 1470ea
Packit 1470ea
Ahora puede ejecutar la aplicación escribiendo «Hello World» en la vista general.
Packit 1470ea
Packit 1470ea
----------------
Packit 1470ea
Para desinstalarla, escriba:
Packit 1470ea
Packit 1470ea
make uninstall
Packit 1470ea
Packit 1470ea
----------------
Packit 1470ea
Para crear un archivador tar escriba:
Packit 1470ea
Packit 1470ea
make distcheck
Packit 1470ea
Packit 1470ea
Esto creará el archivo hello-world-1.0.tar.xz
Packit 1470ea
Packit 1470ea
Packit 1470ea
    </section>
Packit 1470ea
Packit 1470ea
    
Packit 1470ea
Packit 1470ea
  </section>
Packit 1470ea
</page>