3. Basico
Esta seccion presentara algunos de los aspectos más importantes de Gtk+.
3.1. Bucle principal y señales.
Como la mayoria de los kits de herramientas GUI, GTK+ utiliza un modelo de programacion basados en eventos. Cuando el usuario no esta haciendo nada, GTK+ se mantiene en el bucle principal y espera la entrada. Si el usuario realiza alguna accion, por ejemplo, un clic del raton, el bucle principal se "desṕierta" y entrega un evento a GTK+.
Cuando los Widgets reciben un evento, frecuentemente emiten una o mas señales. Las señales notifican a su programa que "ha ocurrido algo interesante" Invocando las funciones que ha conectado a la señal. Estas funciones se conocen comunmente como devoluciones de llamada, tipicamente tomaria alguna accion; por ejemplo, cuando se hace clic en un boton abrir, es posible que muestre un dialogo de seleccion de archivos. Una vez finalizada la devolucion de llamada GTK+ volvera al bucle principal y esperará más entrada del usuario.
Un ejemplo genérico es:
handler_id = widget.connect("event", callback, data)
En primer lugar, Widget es una instancia de un widget que creamos anteriormente. A continuacion, el evento en el que estamos interesados. Cada widget tiene sus propios eventos particulares que pueden ocurrir. Por ejemplo, si tiene un botón, normalmente desea conectarse al evento "clicado". Esto significa que cuando se hace clic en el botón, se emite la señal. En tercer lugar, el argumento de devolucion de llamada es el nombre de la funcion de devolución de llamada. Contiene el código que se ejecuta cuando se emiten señales del tipo especificado. Finalmente, el argumento de datos incluye cualquier dato que se debe transmitir cuando se emite la señal. Sin embargo, este argumentos es completamente opcional y puede ser omitido si no es necesario.
La funcion devuelve un numero que identifica este par particular de señal-devolución de llamada. se requiere desconectar de una señal tal que la funcion de devolucion de llamda no será llamada durante cualquier emision en curso o en curos de la señal a la que se ha conectado.
widget.disconnect(handler_id)
Si ha perdido el "handlerid" por alguna razon(Por ejemplo, los manejadores se instalaron usando Gtk.Builder.connect_signals()
), Puede desconectar una devolucion de llamada especifica utilizando la funcion disconnect_by_func()
:
widget.disconnect_by_func(callback)
Casi todas las aplicaciones se conectaran a la señal "delete-event" de la ventana de nivel superior(top-level window). Se emite si un usuario solicita quese cierre una ventana de nivel superior. El controlador predeterminado para esta señal destruye la ventana,pero no termina la aplicacion. Conexion de la señal "delete-event" a la funcionGtk.main_quit()
Resultara en el comportamiento deseado.
window.connect("delete-event", Gtk.main_quit)
LlamarGtk.main_quit()
hece que el loop principal dentro de Gtk.main()
devuelva(return).
3.2. Propiedades
Las propiedades describen la configuracion y el estado de los widgets. En cuanto a las señales, cada widget tiene su propio conjunto particular de propiedades. Por ejemplo un botón tienene la propiedad "etiqueta" que contiene el texto del widget de etiqueta dentro del boton. Puede especificar el nombre de propiedades como argumentos de palabra clave al crear una instancia de un widget.Para crear una etiqueta alineada a la derecha con el texto,"Hello World" y un angulo de 25 grados, utilice:
label = Gtk.Label(label="Hello World", angle=25, halign=Gtk.Align.END)
Que es equivalente a:
label = Gtk.Label()
label.set_label("Hello World")
label.set_angle(25)
label.set_halign(Gtk.Align.END)
En lugar de utilizar getters y setters tambien puede obtener y establecer las propiedades de Gobjeto a traves de la propiedad "props", como widget.props.prop_name = value . Esto es equivalente al mas detallado widget.get_property("prop-name")
y widget.set_property("prop-name",value).
Para ver que propiedades estan disponibles para un widget en la versión en ejecución de GTK, puedes "dir" la propiedad "props":
widget = Gtk.Box()
print(dir(widget.props))
Esto imprimirá en la consola la lista de propiedades que tienen un Gtk.Box .