PDF de programación - Tema 4 Interfaces gráficas con GTK - Curso de Python Avanzado

Imágen de pdf Tema 4 Interfaces gráficas con GTK - Curso de Python Avanzado

Tema 4 Interfaces gráficas con GTK - Curso de Python Avanzadográfica de visualizaciones

Publicado el 5 de Mayo del 2018
1.511 visualizaciones desde el 5 de Mayo del 2018
1,0 MB
59 paginas
Creado hace 12a (01/05/2011)
Tema 4 Interfaces gráficas con GTK

Curso de Python Avanzado

Juan Pedro Bolívar Puente

Instituto Andaluz de Astrofísica

Mayo de 2011

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

1 / 59

Índice

Introducción

1
2 Fundamentos de GTK
3 Un paseo por los “widgets”
4 Conclusiones

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

2 / 59

Índice

Introducción

Introducción

1
2 Fundamentos de GTK
3 Un paseo por los “widgets”
4 Conclusiones

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

3 / 59

Introducción

Desarrolladores ...

¿Qué hemos visto

hasta ahora?

Cosas de frikis...

Lambdas
Objetos
Metaprogramación
Estructuras infinitas

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

4 / 59

Introducción

... y usuarios

¿Qué quieren los

usuarios?

Hacer cosas
guays sin
pensar

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

5 / 59

Introducción

Las interfaces gráficas...

Las Interfaces Gráficas son la solución

Usan metáforas
Combinan visualizar y modificar
Evitan memorizar
Facilitan la multitarea

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

6 / 59

Fundamentos de GTK

Índice

Introducción

1
2 Fundamentos de GTK
3 Un paseo por los “widgets”
4 Conclusiones

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

7 / 59

Fundamentos de GTK

Frameworks de interfaces gráficas

Usamos un framework de interfaces gráficas

GTK
Gnome, Ubuntu, Novell
Qt
KDE, Kubuntu, Nokia
TkInter
Python, Tcl/Tk
Interfaces nativas...
¿WxWidgets?

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

8 / 59

Fundamentos de GTK

Framework vs Biblioteca

Librería

Componentes que
llamamos desde
nuestro código

Framework

Estructura
que llama a

nuestro código

No nos llames, ya te llamaremos

El Principio de Hollywood

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

9 / 59

Fundamentos de GTK

La base de un programa en GTK

¡El main lo ejecuta GTK!

import pygtk
pygtk . require ( ’ 2.0 ’)
import gtk

if __name__ == ’ __main__ ’:

gtk . main ()

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

10 / 59

Fundamentos de GTK

Estructura del programa

1 Crear interfaz gráfica
2 Conectar manejadores
3 Ejecutar main

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

11 / 59

Fundamentos de GTK

Eventos en GTK

La base de todo en GTK es gobject.GObject

Un GObject expone señales — e.g. ‘‘clicked’’
En cada señal podemos conectar un manejador

def handler ( o b j e t o _ e m i s o r

[ , params fijados al emitir ]
[ , params fijados al conectar ])

Una señal se emite con ...

o b j e t o _ e m i s o r . emit ( " segnal " , ...)

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

12 / 59

Fundamentos de GTK

Conectando a señales ...

Conectando señales

connect (sig, handler, ...)
connect after (sig, handler, ...)

Re-envío de señales

connect object (sig, handler, gobj)
connect object after (sig, handler, gobj)

Devuelen un hdlid que identifica la conexión

El grupo after se ejecuta después de las “normales”

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

13 / 59

Fundamentos de GTK

Manejando la conexión

Desconectando la señal

disconnect (hdlid)

Bloqueando la señal

block (hdlid)
unblock (hdlid)

¡Recuerda!

Una conexión
es un recurso

El bloqueo es

útil para evitar la
recursión infinita

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

14 / 59

Fundamentos de GTK

Un ejemplo ...

Una clase con señales ...

import gobject
class MyClass ( gobject . GObject ):

_ _ g s i g n a l s _ _ = {

’ mysig ’ : ( gobject . SIGNAL_RUN_FIRST ,

None ,
( object ,))

}

El diccionario

gsignals

permite definir las

señales de los objetos de una clase

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

15 / 59

Fundamentos de GTK

Un ejemplo ..

Usando nuestra clase ...

def m y _ h a n d l e r ( obj , param , * fixed ):

print " -- Handling signal -- "
print " Obj : " , obj
print " Param : " , param
print " Fixe : " , fixed

obj = MyClass ()
obj . connect ( ’ mysig ’ , my_handler , ’ Hola ! ’)

obj . emit ( ’ mysig ’ , None )
obj . emit ( ’ mysig ’ , ’ param ’)

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

16 / 59

Fundamentos de GTK

Las propiedades

Las propiedades son atributos “especiales” que

emiten una señal al cambiar

No confundir con property de Python

No son necesariamente físicos, se manipulan

internamente mediante una función

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

17 / 59

Fundamentos de GTK

Las propiedades

Manipulando las propiedades ...

set propertie[s] (property, ...)
get propertie[s] (property, ...)

obj . props . width = 10
var = obj . props . width

Requiere PyGTK 2.8

Controlando la emisión ...

notify (property name)
freeze notify ()
thaw notify ()

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

18 / 59

Fundamentos de GTK

Ejemplo ...

Una clase con propiedades...

class MyClass ( gobject . GObject ):

_ _ g p r o p e r t i e s _ _ = {

’ width ’ : ( object ,

’ Ancho ’ ,
’ El ancho del objeto ’ ,
gobject . P A R A M _ R E A D W R I T E )

}

def d o _ g e t _ p r o p e r t y ( self , prop ):

return getattr ( self , ’_ ’+ prop . name )

def d o _ s e t _ p r o p e r t y ( self , prop , val ):
setattr ( self , ’_ ’+ prop . name , val )

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

19 / 59

Fundamentos de GTK

Ejemplo ...

Usando las propiedades ...

a = MyClass ()

a . connect ( ’ notify :: width ’ ,

m y _ h a n d l e r )

a . props . width = 10
print a . props . width

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

20 / 59

Un paseo por los “widgets”

Índice

Introducción

1
2 Fundamentos de GTK
3 Un paseo por los “widgets”
4 Conclusiones

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

21 / 59

Un paseo por los “widgets”

¿Qué es un widget?

Widget = Window gadget

Un lenguaje gráfico universal

Ventanas, diálogos, botones, menús, pestañas, lista desplegable, caja

de texto, etiquetas, opciones, multi-opciones, ...

Se organizan jerárquicamente

Una ventana contiene una pestaña que contiene una lista que

contiene un botón que contiene una imágen ...

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

22 / 59

Un paseo por los “widgets”

En GTK...

Todo lo que hereda de gtk.Widget

Pueden estar activados o desactivados...

show () / hide ()
show all () / hide all ()
Lo aplica a todo el subárbol de la jerarquía

Tiene una interfaz extensa común...
[get,set] name, get parent, get ancestor

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

23 / 59

Un paseo por los “widgets”

Los toplevels

toplevel = raiz del árbol de widgets

Derivados de gtk.Window

GTK guarda una lista en gtk.gdk.Screen
Al cerrarse una ventana se destruye
Podemos evitar que se cierre devolviendo False en
la señal "delete-event"

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

24 / 59

Un paseo por los “widgets”

Gestión de recursos ...

Los objetos de GTK son un recurso

Se “liberan” con gtk.Object.destroy ()
Al hacerlo, emiten "destroy", que significa:
¡Borra cualquier referencia que tengas hacia mí!
El objeto sigue usable si sigue habiendo referencias

En la práctica necesario sólo en toplevels

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

25 / 59

Un paseo por los “widgets”

Recordemos al amigo with

Disponible en gfits/src/util.py

@ c o n t e x t m a n a g e r
def d e s t r o y i n g ( thing ):

try :

yield thing

finally :

thing . destroy ()

Veremos su utilidad con los diálogos...

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

26 / 59

Un paseo por los “widgets”

Nuestra primera ventana...

import gtk

win = gtk . Window ()
win . connect ( ’ destroy ’ , gtk . m ai n_ q ui t )
win . show ()

gtk . main ()

También podríamos parar el bucle

en la señal ”delete-event”

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

27 / 59

Un paseo por los “widgets”

Metiendo cosas en la ventana ...

¿Cómo organizamos los widgets dentro

de la ventana?

Primera idea:
Colocarlos en posiciones (X, Y) determinadas
Mala idea:
Las ventanas deben poder cambiar de tamaño

Juan Pedro Bolívar Puente (Instituto Andaluz de Astrofísica)

Tema 4 Interfaces gráficas con GTK

Mayo de 2011

28 / 59

Un paseo por los “widgets”
  • Links de descarga
http://lwp-l.com/pdf10846

Comentarios de: Tema 4 Interfaces gráficas con GTK - Curso de Python Avanzado (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad