jueves, 13 de enero de 2011

GUI's en python con [ GTK | QT4 ] y [XML | HTML... ]

Hoy traigo una librería que aún no está acabada, pero puede que interese a la gente que no le guste complicarse lo más mínimo con las interfaces, pero que aún así le interese hacer unas GUI para los script [ guiml.zip ].

La idea es simple, le pasas un pedazo de HTML a la "librería" y esta selecciona el Toolkit disponible (por ahora solo soporta Gtk y Qt4, cuando le heche el guante a algo que tenga tk instalado lo añado ) hace una GUI basandose en eso, por ejemplo, para

<title>Simple test</title>
<form action="test">
Decide <br>
<input type="submit" value="SI" name="Si"><input type="submit" value="NO" name="No">

Con Gtk:

Con Qt4:
No está completa y Qt4 es un peligro ( he visto cosas que jamás creeríais, SegFault en python ! ) pero parece que funciona relativamente bien
Copipasteo del archivo "Uso":


Uso:

Inicio:

Para comenzar hay que obtener un objeto "GUI", esto se hace llamando a
 guiml.getGui(), adicionalmente se puede enviar una lista de interfaces,
 en orden de preferencia, si no se especifica se seleccionará una de las
 disponibles [ "gtk", "qt4", "tk" ] por defecto.

    gui = guiml.getGui()

Para iniciar la GUI se utiliza como argumento un diccionario que
 indica que funcion lanza cada "action" de los form's
 (La función se manda sin parentesis)

Al iniciar se le manda la gui y un diccionario que trabaja parecido al
 $_REQUEST['x'] de php:

    w = guiml.guiml(gui,{"action":funcion})

#-----

Llamada a una pagina:

Para mostrar una pagina se llama a load y se manda como argumento
 el archivo:

    w.load(f)

-Se puede mandar un diccionario como segundo argumento que reemplaza
 el value de botones y entradas de texto y src de imágenes, si el "name"
 coincide con alguno del diccionario

Alternativamente se puede enviar una cadena de *ml, de esta forma:

    w.load(None, {} ,'<title>Blablabla</title><form action="asd">...')

#-----

Cuando llega a una funcion:

Cuando llega a la funcion le manda un diccionario y el nombre del botón
 pulsado, por ejemplo, si ejecutara una funcion llamada prueba(dic, btn)
 (el argumento es necesario), se extraerian las variables asi:

    def prueba( dic, btn ):
        respuesta = dic['resp']

El nombre de las variables dentro del diccionario son los "name" de la
 etiqueta en cuestión.


#-----

    Notas:
[-] Aún no pilla texto formateado

    Tags aceptados:

[+] Title                     <title>
[+] Form (sólo uno por ahora) <form>
[+] Line Break                <br>
[+] Texto plano               Blah!
[+] Input type = text          <input>     
[+] Input type = submit          <input>
[+] Imagenes                  <img>
[+] Input type = reset        <input>
[+] MetaTags en un "about"    <meta>

Por hacer:

[+] Selects
[+] Checkbox y radio

Más imágenesGtk:


Qt4:

Hale, con root

3 comentarios:

  1. Hace tiempo lei que queran hacer algo parecido a esto dentro de GTK. Es impresionante hacer GUIs as; termina siendo lo ms fcil del mundo :)

    kenkeiras me vas a picar con pythooon :)

    ResponderEliminar
  2. Cual prefieres de todos los creadores de GUI?
    [pyQt,tkinter,GTK,wxpython,etc]

    y si de por casualidad conoces una tool que facilite el codeado de GUI en python

    ResponderEliminar
  3. @gaspar: siii, ven a python, tenemos galletas! :D

    @lexel: no me llevo muy bien con las GUI, asi que el único que use es pyGTK, pero casi recomendaría Tkinter, es estándar y parece que es fácil de usar

    en cuanto a algo que codee la GUI... tienes aqui algo. Si buscas algo serio, tienes Glade para pyGTK o (sino recuerdo mal) QtDesigner para Qt. Además creo que Anaconda hace de IDE para TKinter, hay donde elegir, pero no sabría recomendar uno concreto .

    ResponderEliminar