Desarrollo de aplicaciones con Python 3, Glade y GTK+ 3 en Windows

Introducción

En GNU/Linux desarrollar aplicaciones con Python 3, Glade y GTK+ 3 es muy fácil, los paquetes vienen por defecto en la mayoría de distribuciones.

Gracias a Glade podemos crear interfaces de usuario rápida y fácilmente y luego usarlas en conjunto con Python. Para lograrlo se usa PyGObject gracias al sistema de introspección que ofrece GNOME, lo que facilita mucho el desarrollo rápido de aplicaciones (RAD); además es posible usar nuestras interfaces creadas con Glade desde otros lenguajes de programación.

El problema se presenta cuando queremos usar nuestras aplicaciones en Microsoft Windows, puesto que hasta hace poco no existían oficialmente los paquetes para éste sistema.

Con el presente tutorial se pretende que las aplicaciones que se han hecho en GNU/Linux usando Python 3 y GTK+ 3 se ejecuten sin problemas en Windows.

Requerimientos

  • Python 3.3
  • Gtk+ 3
  • Glade 3.14 o superior (diseñador de interfaces gráficas)
  • PyGobject

Instalación en Windows

Se empezará creando una carpeta llamada software u otra de su preferencia y guardaremos en ella todos los paquetes que se descarguen.

Descarga de paquetes de instalación

Descargar Python 3.3

Se puede descargar desde la página oficial de Python www.python.org

Descargar instalador Python

Descargar instalador Python

Al hacer clic en el vínculo (Windows Installer) se descargará el instalador de Python.

Descargar Glade

Sitio de descarga: glade.gnome.org

Tanto la versión de Python como la de Glade son de 32 bits, pero se ejecutan sin problemas en sistemas de 64 bits

Página Glade

Página Glade
Descargar PyGObject

Sitio de descarga: https://wiki.gnome.org/PyGObject

Debemos descargar la versión para GTK+ 3

PyGObject

PyGObject
PyGObject en Google code

PyGObject en Google code

Instalación de los paquetes

Bien hasta este punto ya tenemos todos los paquetes descargados en la carpeta software y tal como hemos descargado cada paquete empezaremos primero con la instalación de Python.

Paquetes descargados

Paquetes descargados
Instalación de Python

La instalación es muy sencilla, el asistente nos guiará en el proceso; dejamos todas las opciones marcadas por defecto.

Programa de instalación Python

Programa de instalación Python

Como se ve en la imagen, Python se instala en la carpeta C:\Python33\ por defecto, lo dejamos como está y continuamos con la instalación.

Carpeta de instalación de Python

Carpeta de instalación de Python

En este punto de la instalación seleccionamos la opción Add python.exe to Path, con la finalidad que cuando lancemos un interprete de Python se ejecute sin la necesidad de agregarlo al path del sistema de forma manual.

Agregar Python al Path del sistema

Agregar Python al Path del sistema

Luego finalizamos la instalación y Python se habrá instalado en nuestro sistema.

Instalación de Glade

La instalación de Glade no representa mayor complicación ejecutamos el programa de instalación y seguimos los pasos del asistente.

Instalar glade

Instalar glade
Instalación de PyGObject

Habíamos descargado el paquete pygi-aio-3.4.2rev11.7z, éste paquete incluye PyGObject para Python 3.3 y las librerías GTK+ 3 para Windows, que está comprimido con 7-zip, lo descomprimimos y tendremos una carpeta con el siguiente contenido:

Contenido de la carpeta pygi-aio-3.4.2rev11.7

Contenido de la carpeta pygi-aio-3.4.2rev11.7

Ahora copiamos la carpeta gtk a C:\Python33\Lib\site-packages que es donde se instalan los paquetes de terceros para Python.

Copiar carpeta gtk

Copiar carpeta gtk
Carpeta gtk en C:\Python33\Lib\site-packages

Carpeta gtk en C:\Python33\Lib\site-packages

Volvemos a nuestra carpeta pygi-aio-3.4.2rev11 y abrimos la carpeta py33 por la versión de Python que es la 3.3

Contenido de la carpeta py33

Contenido de la carpeta py33

Seleccionamos todo el contenido de la carpeta py33 y lo volvemos a copiar dentro de la carpeta C:\Python33\Lib\site-packages, se nos pedirá mezclar y sobrescribir, respondemos afirmativamente. El contenido de la carpeta site-packages quedaría como se muestra en la siguiente imagen:

Copiar el contenido de la carpeta py33 en C:\Python33\Lib\site-packages

Copiar el contenido de la carpeta py33 en C:\Python33\Lib\site-packages

Comprobación de la correcta instalación de PyGobject y GTK+ 3

Para comprobar que nuestra instalación ha sido correcta abrimos el IDLE de Python e importamos las librerías GTK+ 3 y si no tenemos ningún mensaje de error todo habrá sido hecho correctamente.

from gi.repository import Gtk

PyGobject y GTK+ 3 instalados correctamente

PyGobject y GTK+ 3 instalados correctamente

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

      joaquin dijo

    ¿y por que GTK? ¿no seria mejor desarrollar en QT ? ademas de ser multiplataforma y muchos dicen que es el futiro

         artus dijo

      Bueno las dos grandes librerías gráficas del escritorio GNU/Linux son GTK y QT, cada quién elige la de su preferencia. No hay porqué pelearse.

      La diferencia de GTK con QT es que el segundo es un framework, muy bueno por cierto, pero al ser un framework consume un poco más de recursos.

      Por ejemplo Mozilla Firefox, Google Chrome, LibreOffice y un largo etcétera están hechos con GTK; esto no quiere decir que sea mejor que QT, cada quién deberá elegir el que se ajuste a sus preferencias y necesidades, no deseamos causar una discusión al respecto.

           pandev92 dijo

        Google chrome desde la versión 33, deja gtk.

      rolo dijo

    y porque la expicacion para windows y no linux

         Germán dijo

      Será porque en Linux ya está todo empaquetado y en los respositorios oficiales de cada distro? En Fedora, por ejemplo, ya tengo Python 3, Gtk+ 3 y PyGobject instalados por default. Si quiero Glade, es sólo «yum install glade». Fácil, no? 🙂

         artus dijo

      Porque como dice Germán, para las distribuciones GNU/Linux ya se encuentran empaquetados y es muy fácil instalarlos; por ejemplo para instalar glade en Debian es muy sencillo:
      aptitude install glade

      Marcelo dijo

    ¿Si quiero usar Python 2.7 los pasos serían los mismos?
    Obviamente, instalando el Python 2.7 de 32 bits (por más que use el SO en 64 bits) y en vez de la carpeta py33 iría la 2.7. ¿Funcionaría?
    Gracias.

         artus dijo

      Pues sí, si tienes algún problema me dejas un comentario.

      Suerte.

           Marcelo dijo

        Gracias, ya probé y por ahora me funciona el «Hola, mundo».

        Veo si consigo algún buen tutorial del pyGTK3 o como se llame y cualquier problema, aviso.

               Marcelo dijo

            ¡Caramba! ¡Muchas gracias!

               Marcelo dijo

            Probando el GTK3 con Python 2.7 en Windows y siguiendo el tutorial. Hasta ahora todos los programas me funcionan, excepto el del Capítulo 14 (IconView -> https://python-gtk-3-tutorial.readthedocs.org/en/latest/iconview.html)

            Me da el siguiente error:
            Traceback (most recent call last):
            File «C:\Users\Usuario\Desktop\prueba.py», line 24, in
            win = IconViewWindow()
            File «C:\Users\Usuario\Desktop\prueba.py», line 19, in __init__
            pixbuf = Gtk.IconTheme.get_default().load_icon(icon, 64, 0)
            File «C:\Python27\lib\site-packages\gi\types.py», line 47, in function
            return info.invoke(*args, **kwargs)
            GError: Icon ‘gtk-cut’ not present in theme

            Lo intenté con otros iconos y tampoco funciona. ¿Me falta instalar algún tema? Gracias desde ya.

               Marcelo dijo

            Tampoco me anda el ejemplo 19. Drag and Drop.

            La función que llama en ambos casos y que es en donde me da error es:

            pixbuf = Gtk.IconTheme.get_default().load_icon(icon_name, 16, 0)

            No me encuentra el icono, pero en otros ejemplos sí los puede usar. Sólo me da error cuando lo quiero usar con esa función (acá icon_name puede reemplazarse con algún valor como por ejemplo Gtk.STOCK_CUT o cualquiera y da exactamente el mismo error).

               Marcelo dijo

            Sigo hablando solo. Lo que me funciona en otros ejemplos es que las imágenes se me cargan en los botones. No puedo cargar los iconos con la función que viene en los dos ejemplos que di antes.

               artus dijo

            Creo que el error es claro:
            GError: Icon ‘gtk-cut’ not present in theme

            Según parece ese icono no está disponible, usa otro icono. Probablemente el mantenedor del paquete no incluyó los iconos del tema o no se puede encontrar en la ruta por defecto, usa una distribución de GNU/Linux y mira si sigue apareciendo el mismo error.

            Con respecto a la pregunta 19, parece estar relacionado con la versión de PyGobject, en la parte superior de la documentación dice:

            Note
            Versions of PyGObject = 3.0.3 is required for the following examples to work.

            La versión que tú tienes es la 3.0, prueba en una distribución de GNU/Linux; y pues tenemos que esperar que actualicen el paquete (para Windows) o en todo caso lo puedes compilar por ti mismo.

            Saludos y sigue adelante.

               Marcelo dijo

            En Ubuntu me funcionan perfecto todos los ejemplos del tutorial. En Windows, sigue sin funcionar. Voy a tener que esperar. Otro que no anda es el ejemplo del Spinner, que no hace la animación. Saludos y gracias.

      Yoshua dijo

    He seguido el tutorial de instalacion e instalado todo paso a paso.
    Y ejecutando el siguiente codido:
    from gi.repository import Gtk

    class FiestraPrincipal:
    def __init__(self):
    filename = «/datos/dam/exemplosPython/formularioSaudo»
    constructor = Gtk.builder()
    constructor.add_from_file(filename)
    #diccionario donde relacionamos sinais con eventos
    sinais={
    «clickedAceptar»: self.clic_boton,
    «activateCadroTexto»: self.clic_boton,
    «destroyFiestra»: Gtk.main_quit

    }
    constructor.connect_signals(sinais)
    #Obtenemos una referencia do descriptor XML para poder acceder
    self.etiqueta = self.widgets_widget(«Etiqueta»)
    self.cadroTexto = self.widgets_widget(«CadroTexto»)

    def clic_boton(self,widget):
    texto=self.cadroTexto.get_text()
    self.etiqueta.set_text(«ola %s» % texto)

    if __name__ ==»__main__»:
    FiestraPrincipal()
    Gtk.Main()

    Me sale esta respuesta:
    Traceback (most recent call last):
    File «C:/Users/admin/Google Drive/prueba/FormularioSaudo.py», line 3, in
    from gi.repository import Gtk
    File «C:\Python33\lib\site-packages\gi\__init__.py», line 27, in
    from ._gi import _API, Repository
    ImportError: DLL load failed: %1 no es una aplicación Win32 válida.

    Alguien sabe a que se debe el problema, o cual puede ser su posible solucion.
    Muchas gracias.

      Jesus dijo

    Interesante. Había hecho la instalación en linux, pero esta bien la explicacion para windows, ahora lo tengo en los dos. 😉

      Rafa Carmona dijo

    Es curioso en un windows 7 32 bits a la primera.
    En un WIndows 7 64 bits, no puedo hacerlo correr, siempre me sale ;
    >>> from gi.repository import Gtk
    Traceback (most recent call last):
    File «», line 1, in
    File «C:\Python33\lib\site-packages\gi\__init__.py», line 27, in
    from ._gi import _API
    ImportError: DLL load failed: No se encontró el proceso especificado.

    Lo he intentado de todas formas posibles, ya perdí la ilusión de instalarlo.

         artus dijo

      Verás las librerías para 64 bits tienen aún algunos bug, por favor instala la versión de 32bits tanto de python y GTK+ para que no tengas problemas.

      Nunca debes perder la ilusión 🙂

      Richard dijo

    Buenas estoy trabajando con python + gtk3 , es muy bueno ahora estoy en un pequeño problema quiero cambiarle el icono a mi formulario(window) en este caso y lo logro cambiarlo, desde ya gracias, Saludos

      jors dijo

    publica videos sencillo de como programar en gtk+3 y tuturiales sencillos saludos

      Jose dijo

    Exelente tutorial. Muchas gracias por tu esfuerzo. Saludos.

      jkmilo1030 dijo

    hice todos los pasos y cuando fui a confiarmar la instalacion me salio este error.

    Traceback (most recent call last):
    File «», line 1, in
    from gi.repository import Gtk
    ImportError: No module named ‘gi’