Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Mayo de 2011
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 1 / 59
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
2 / 59
Introducci on
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
3 / 59
Introducci on
Cosas de frikis...
Lambdas Objetos Metaprogramaci on Estructuras innitas
Mayo de 2011 4 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Introducci on
... y usuarios
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Introducci on
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
6 / 59
Fundamentos de GTK
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
7 / 59
Fundamentos de GTK
Qt
KDE, Kubuntu, Nokia
TkInter
Python, Tcl/Tk
Interfaces nativas...
WxWidgets?
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 8 / 59
Fundamentos de GTK
Framework vs Biblioteca
Librer a
Componentes que llamamos desde nuestro c odigo
Framework
Estructura que llama a nuestro c odigo
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Fundamentos de GTK
import pygtk
pygtk . require ( 2.0 ) import gtk
if __name__ == __main__ :
gtk . main ()
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
10 / 59
Fundamentos de GTK
1 2 3
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas 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 nales e.g. clicked En cada se nal podemos conectar un manejador
def handler ( objeto_emisor
[ , params fijados al emitir ] [ , params fijados al conectar ])
Una se nal se emite con ... objeto_emisor . emit ( " segnal " , ...)
Mayo de 2011 12 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Fundamentos de GTK
Fundamentos de GTK
Manejando la conexi on
Desconectando la se nal disconnect (hdlid) Recuerda! Una conexi on es un recurso
Bloqueando la se nal block (hdlid) unblock (hdlid) El bloqueo es u til para evitar la recursi on innita
Mayo de 2011 14 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Fundamentos de GTK
Un ejemplo ...
Una clase con se nales ...
import gobject class MyClass ( gobject . GObject ):
__gsignals__ = { mysig : ( gobject . SIGNAL_RUN_FIRST , None , ( object ,)) }
El diccionario gsignals permite denir las se nales de los objetos de una clase
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 15 / 59
Fundamentos de GTK
Un ejemplo ..
Usando nuestra clase ...
def my_handler ( 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 Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 16 / 59
Fundamentos de GTK
Las propiedades
Las propiedades son atributos especiales que emiten una se nal al cambiar
No confundir con property de Python No son necesariamente f sicos, se manipulan internamente mediante una funci on
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas 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 Controlando la emisi on ... notify (property name) freeze notify () thaw notify ()
Mayo de 2011 18 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Fundamentos de GTK
Ejemplo ...
Una clase con propiedades...
class MyClass ( gobject . GObject ):
__gproperties__ = { width : ( object , Ancho , El ancho del objeto , gobject . PARAM_READWRITE ) }
def do_get_property ( self , prop ): return getattr ( self , _ + prop . name ) def do_set_property ( self , prop , val ):
setattr ( self , _ + prop . name , val )
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 19 / 59
Fundamentos de GTK
Ejemplo ...
Usando las propiedades ... a = MyClass () a . connect ( notify :: width , my_handler ) a . props . width = 10 print a . props . width
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
20 / 59
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
21 / 59
Qu e es un widget?
Tiene una interfaz extensa com un... [get,set] name, get parent, get ancestor
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
23 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
24 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
25 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
26 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
28 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
29 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
30 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
31 / 59
M as widgets ...
gtk.Label (label=None, stock=None) Etiquetas de texto Se nales importantes activate-link copy-clipboard Propiedades importantes label use-markup ellipsize justify selectable wrap
Mayo de 2011 32 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Al n algo m as serio...
win = gtk . Window () win . connect ( destroy , gtk . main_quit ) lab = gtk . Label ( Hola ... ) btn = gtk . Button ( Pinchame ) btn . connect ( clicked , lambda * a : lab . set_text ( ... mundo ! )) box = gtk . HBox () win . add ( box ) box . pack_start ( btn ) box . pack_start ( lab ) win . show_all () gtk . main ()
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 33 / 59
M as widgets ...
Lo m as importante est a en gtk.MenuItem (label=None, use underline=True) Se nales importantes activate Propiedades importantes submenu accel-path
Mayo de 2011 35 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
win = gtk . Window () win . connect ( destroy , gtk . main_quit ) box = gtk . VBox ( False , 0) win . add ( box ) menu_bar = gtk . MenuBar () box . pack_start ( menu_bar , False ) file_menu = gtk . Menu () quit_item = gtk . MenuItem ( Quit ) file_menu . append ( gtk . MenuItem ( Open )) file_menu . append ( gtk . MenuItem ( Save ))
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
36 / 59
quit_item = gtk . MenuItem ( Quit ) file_menu . append ( quit_item ) quit_item . connect_object ( activate , gtk . Window . destroy , win ) file_item = gtk . MenuItem ( File ) file_item . set_submenu ( file_menu ) menu_bar . append ( file_item ) win . show_all () gtk . main ()
Y muchos m as ...
[H,V]ButtonBox () [H,V]Paned ()
add1 () add2 ()
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
40 / 59
win = gtk . Window () win . connect ( destroy , gtk . main_quit ) toolbar = gtk . Toolbar () close_button = toolbar . append_item ( " Open " , " Open a file " , " Private " , gtk . image_new_from_stock ( gtk . STOCK_OPEN ,32) , lambda * a : None ) close_button = toolbar . append_item ( " Close " , " Closes this app " , " Private " , gtk . image_new_from_stock ( gtk . STOCK_CLOSE ,32) , lambda * a : win . destroy ())
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
41 / 59
notebook = gtk . Notebook () notebook . append_page ( gtk . Frame ( Uno ) , gtk . Label ( Uno )) notebook . append_page ( gtk . Frame ( Dos ) , gtk . Label ( Dos )) box = gtk . VBox ( False , 0) box . pack_start ( toolbar , False ) box . pack_start ( notebook ) win . add ( box ) win . show_all () gtk . main ()
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
42 / 59
Y muchos m as ...
[H,V]ButtonBox () [H,V]Paned ()
add1 () add2 ()
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
43 / 59
Y muchos m as ...
Las listas siguen una arquitectura modelo-vista-controlador
Modelo Contiene la informacion est atica Vista Representa el medelo, se entera si cambia por se nales Controlador Cambia los valores del modelo, e.g. en respuesta al usuario
Mayo de 2011 44 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
win = gtk . Window () win . connect ( destroy , gtk . main_quit ) model = gtk . ListStore ( gobject . TYPE_BOOLEAN , gobject . TYPE_STRING ) view = gtk . TreeView ( model ) view . append_column ( gtk . TreeViewColumn ( Done , gtk . CellRendererToggle () , active = 0)) view . append_column ( gtk . TreeViewColumn ( Task , gtk . CellRendererText () , text = 1))
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
46 / 59
model . append (( True , Python avanzado )) model . append (( False , Interfaces graficas )) model . append (( False , Django )) win . add ( view ) win . show_all () gtk . main ()
Aunque el resto lo haremos con Glade, las listas hay que tocarlas a mano!
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
47 / 59
Otros widgets ... Hay muchos widgets especializados que deb eis consultar cuando necesit eis
gtk.TextView gtk.Calendar
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
48 / 59
NavigationToolbar
Es la barra de herramientas que aparece con maptplotlib.pyplot.show ()
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
49 / 59
from matplotlib . backends . backend_gtkagg import \ N a vi g a t i o n T o o l b a r 2 G T K A g g as Navi gation Toolba r from matplotlib . figure import Figure from numpy import arange , sin , pi
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 50 / 59
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
51 / 59
Ta ch an!
Y a nadimos a la ventana ...
canvas = FigureCanvas ( fig ) vbox . pack_start ( canvas ) toolbar = NavigationToolbar ( canvas , win ) vbox . pack_start ( toolbar , False , False ) win . show_all () gtk . mainloop ()
Di alogos
Di alogo = Ventana emergente que bloquea la aplicaci on hasta que le contestamos ...
Ejemplos ... FileChooserDialog AboutDialog ColorSelectionDialog FontSelectionDialog MessageDialog
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK Mayo de 2011 53 / 59
Ejemplo ...
Tiene un m etodo run () que lo ejecuta y devuelve el resultado del usuario Recordad que por ser una ventana hay llamar a destroy()!
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
54 / 59
Conclusiones
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
56 / 59
Conclusiones
Conclusiones
La programaci on orientada a eventos nos obliga a usar se nales Lo importante es qu e ocurre no cuando ocurre Escribir interfaces a mano es pesado
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
57 / 59
Conclusiones
Recursos adicionales
PyGTK Tutorial John Finlay http: //www.pygtk.org/pygtk2tutorial/index.html PyGTK Notebook, A Journey Through Python Gnome Technologies Peter Gill http://www.majorsilence.com/PyGTK_Book
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
58 / 59
Conclusiones
Juan Pedro Bol var Puente (Instituto Andaluz de Astrof Tema sica) 4 Interfaces gr acas con GTK
Mayo de 2011
59 / 59