Taller PyGTK <ul><li>Taller de aprendizaje </li></ul><ul><li>Tomás Vírseda ( [email_address] ) </li></ul><ul><li>LinuxEC <...
Taller PyGTK plataforma de desarrollo lenguaje de programación toolkit gráfico
Taller PyGTK GNOME , plataforma de desarrollo Guías :  prácticas comunes para escribir código o diseñar interfaces Referen...
Tipos de particiones Taller PyGTK PYTHON , lenguaje de programación Características :  <ul><ul><li>Software Libre </li></u...
Tipos de particiones Taller PyGTK GTK , toolkit gráfico <ul><li>Estabilidad  </li></ul><ul><ul><ul><li>+10 años </li></ul>...
Taller PyGTK GTK , toolkit gráfico <ul><ul><li>Widgets </li></ul></ul><ul><ul><li>Eventos y señales </li></ul></ul><ul><ul...
Taller PyGTK GTK , toolkit gráfico Widgets:  componente gráfico de una ventana
Taller PyGTK GTK , toolkit gráfico Signals mensajes emitidos por interacción con los widgets toggled ,  clicked ,  destroy...
GTK , toolkit gráfico <ul><li>función ejecutada por el manejador de señales  </li></ul><ul><ul><li>en respuesta a una seña...
GTK , toolkit gráfico Un widget no se dispone en ningún orden.  Se añadee a widgets específicos llamados  contenedores   T...
Sistemas de archivos Taller PyGTK - hablar + código
Sistemas de archivos Taller PyGTK Un ejemplo sencillo #!/usr/bin/env python # -*- coding: utf-8 -*- # File: basico.py # Au...
Sistemas de archivos Taller PyGTK Aplicación Gestor de cumpleaños <ul><li>Objetivos de aprendizaje </li></ul><ul><ul><li>a...
Sistemas de archivos <ul><ul><li>#!/usr/bin/env python </li></ul></ul>Taller PyGTK Ruta del intérprete de python Soporte U...
Sistemas de archivos <ul><ul><li>import os </li></ul></ul>Taller PyGTK imports <ul><ul><li>import sys </li></ul></ul><ul><...
Sistemas de archivos Taller PyGTK Esqueleto del programa <ul><ul><li>class Programa: </li></ul></ul><ul><ul><li>def __init...
Sistemas de archivos Taller PyGTK Cargar el interfaz gráfico <ul><ul><li>class Widgets: </li></ul></ul><ul><ul><li>””” </l...
Sistemas de archivos Taller PyGTK Conectar señales <ul><ul><li>Señales:  conectar señales a los widgets </li></ul></ul><ul...
Sistemas de archivos Taller PyGTK Widgets <ul><ul><li>Treeview : muestra el contenido en forma de árbol. Consta de: </li><...
Sistemas de archivos Taller PyGTK Widgets <ul><ul><li>gtk.Calendar : muestra un calendario navegable </li></ul></ul><ul><u...
Taller PyGTK
Upcoming SlideShare
Loading in...5
×

Taller PyGTK

1,521

Published on

Taller introducción a la programación gráfica en GNOME con python y GTK

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,521
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
50
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide
  • Taller PyGTK

    1. 1. Taller PyGTK <ul><li>Taller de aprendizaje </li></ul><ul><li>Tomás Vírseda ( [email_address] ) </li></ul><ul><li>LinuxEC </li></ul>
    2. 2. Taller PyGTK plataforma de desarrollo lenguaje de programación toolkit gráfico
    3. 3. Taller PyGTK GNOME , plataforma de desarrollo Guías : prácticas comunes para escribir código o diseñar interfaces Referencias : contienen las API de las bibliotecas y los estándares que se usan en la plataforma GNOME Herramientas de desarrollo : Constructores de interfaces gráficos, un sistema de ayuda integrado, editores, herramientas de informe de errores, debuggers, sistema de documentación, etc. ...
    4. 4. Tipos de particiones Taller PyGTK PYTHON , lenguaje de programación Características : <ul><ul><li>Software Libre </li></ul></ul><ul><ul><li>Maduro </li></ul></ul><ul><ul><ul><ul><li>+14 años </li></ul></ul></ul></ul><ul><ul><ul><ul><li>diseño elegante y robusto </li></ul></ul></ul></ul><ul><ul><li>Fácil de aprender </li></ul></ul><ul><ul><ul><ul><li>se lee como pseudocódigo </li></ul></ul></ul></ul><ul><ul><ul><ul><li>sintaxis sencilla </li></ul></ul></ul></ul><ul><ul><li>Portable </li></ul></ul><ul><ul><ul><ul><li>Unix, Windows, Mac, ... </li></ul></ul></ul></ul>Propiedades : <ul><ul><li>Compila a bytecode interpretado </li></ul></ul><ul><ul><li>Multi-paradigma </li></ul></ul><ul><ul><ul><ul><li>Todo son objetos </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Pero puede usarse de manera procedural </li></ul></ul></ul></ul><ul><ul><li>Módulos, clases, funciones, generadores </li></ul></ul><ul><ul><li>Biblioteca estándar extensa </li></ul></ul><ul><ul><li>Manejo moderno de errores </li></ul></ul><ul><ul><li>Tipos de alto nivel </li></ul></ul><ul><ul><li>Interprete interactivo </li></ul></ul><ul><ul><li>Bases de datos </li></ul></ul><ul><ul><ul><ul><li>MySQL, PostgresSQL, MS SQL, Informix, DB/2, Sybase </li></ul></ul></ul></ul><ul><ul><li>Interfaces gráficas </li></ul></ul><ul><ul><ul><ul><li>Qt, GTK, win32, wxWidgets, Cairo </li></ul></ul></ul></ul><ul><ul><li>Frameworks Web </li></ul></ul><ul><ul><ul><ul><li>Django, Turbogears, Zope, Plone, webpy </li></ul></ul></ul></ul>
    5. 5. Tipos de particiones Taller PyGTK GTK , toolkit gráfico <ul><li>Estabilidad </li></ul><ul><ul><ul><li>+10 años </li></ul></ul></ul><ul><ul><ul><li>Sólida comunidad de usuarios </li></ul></ul></ul><ul><li>Multiplataforma </li></ul><ul><ul><ul><li>GNU/Linux, Mac, Windows, ... </li></ul></ul></ul><ul><li>Bindings </li></ul><ul><ul><ul><li>C++, C#, Java, Python , Perl, R, Lua, Guile, Ruby, PHP, Ada, Ocaml, Haskell, S-Lang, D </li></ul></ul></ul><ul><li>Móvil </li></ul><ul><ul><ul><li>Nokia 770 / N800 / N810 </li></ul></ul></ul><ul><ul><ul><li>One Laptop Per Child Project </li></ul></ul></ul><ul><ul><ul><li>OpenMoko </li></ul></ul></ul><ul><li>Interfaces </li></ul><ul><ul><ul><li>Gran variedad de widgets </li></ul></ul></ul><ul><li>Accommodating </li></ul><ul><ul><ul><li>Look and feel nativo </li></ul></ul></ul><ul><ul><ul><li>Soporte para themes </li></ul></ul></ul><ul><ul><ul><li>Thread seguros </li></ul></ul></ul><ul><ul><ul><li>Orientación a objetos </li></ul></ul></ul><ul><ul><ul><li>Internationalización </li></ul></ul></ul><ul><ul><ul><li>Localización </li></ul></ul></ul><ul><ul><ul><li>Accesibilidad </li></ul></ul></ul><ul><ul><ul><li>Soporte para texto bidireccional </li></ul></ul></ul><ul><ul><ul><li>Soporte UTF8 </li></ul></ul></ul><ul><ul><ul><li>Documentación </li></ul></ul></ul><ul><li>Foundations </li></ul><ul><ul><ul><li>Sistemas de objetos y tipos, bucle principal, plugins, threads, timers, manejo de memoria, </li></ul></ul></ul><ul><ul><ul><li>listas, tablas hash, arrays, árboles, manejo de cadenas, XML parser, Base64, ... </li></ul></ul></ul>
    6. 6. Taller PyGTK GTK , toolkit gráfico <ul><ul><li>Widgets </li></ul></ul><ul><ul><li>Eventos y señales </li></ul></ul><ul><ul><li>Callbacks </li></ul></ul><ul><ul><li>Contenedores </li></ul></ul><ul><ul><li>Disposición de los widgets </li></ul></ul>Conceptos:
    7. 7. Taller PyGTK GTK , toolkit gráfico Widgets: componente gráfico de una ventana
    8. 8. Taller PyGTK GTK , toolkit gráfico Signals mensajes emitidos por interacción con los widgets toggled , clicked , destroyed... <ul><ul><li>Signal handlers </li></ul></ul><ul><ul><li>espera hasta que llega unas señal específica </li></ul></ul><ul><ul><li>y ejecuta una función en respuesta </li></ul></ul>Señales y eventos <ul><li>Eventos </li></ul><ul><ul><li>mensajes emitidos sin interacción con los widgets </li></ul></ul><ul><ul><li>button_press_event, destroy_event, key_press_event, etc. </li></ul></ul>
    9. 9. GTK , toolkit gráfico <ul><li>función ejecutada por el manejador de señales </li></ul><ul><ul><li>en respuesta a una señal </li></ul></ul>Taller PyGTK Callbacks
    10. 10. GTK , toolkit gráfico Un widget no se dispone en ningún orden. Se añadee a widgets específicos llamados contenedores Taller PyGTK Disposición de los widgets <ul><ul><li>Un widget debe ser añadido a un contenedor que a su vez puede pertenecer a otro contenedor </li></ul></ul>
    11. 11. Sistemas de archivos Taller PyGTK - hablar + código
    12. 12. Sistemas de archivos Taller PyGTK Un ejemplo sencillo #!/usr/bin/env python # -*- coding: utf-8 -*- # File: basico.py # Author: Tomás Vírseda # License: GPL v3 # Description: ejemplo uso de pygtk # Gtk bindings import gtk # gtk bindings # callback button1 def boton_uno(widget, data=None): print &quot;Hola, soy el botón uno&quot; # callback button2 def boton_dos(widget, data=None): print &quot;Hola, soy el botón dos&quot; # create widgets window = gtk.Window() # main window button1 = gtk.Button('Botón 1') # First button button2 = gtk.Button('Botón 2') # Second button container = gtk.HBox() # container # conectar señales window.connect('destroy', gtk.main_quit) button1.connect('clicked', boton_uno) button2.connect('clicked', boton_dos) # pack buttons container.pack_start(button1) container.pack_end(button2) # add container to top level window window.add(container) # show all and run! window.show_all() gtk.main()
    13. 13. Sistemas de archivos Taller PyGTK Aplicación Gestor de cumpleaños <ul><li>Objetivos de aprendizaje </li></ul><ul><ul><li>aspectos básicos de python y gtk </li></ul></ul><ul><ul><li>cargar interfaz gráfica </li></ul></ul><ul><ul><li>uso de widgets y señales </li></ul></ul><ul><ul><li>entrada/salida de datos </li></ul></ul>
    14. 14. Sistemas de archivos <ul><ul><li>#!/usr/bin/env python </li></ul></ul>Taller PyGTK Ruta del intérprete de python Soporte UTF-8 Fichero código fuente Autor programa Licencia Descripción Comenzamos ... 1. Crear y editar el fichero fuente miscumples.py: <ul><ul><li># -*- coding: utf-8 -*- </li></ul></ul><ul><ul><li># File: miscumples.py </li></ul></ul><ul><ul><li># Author: Tomás Vírseda </li></ul></ul><ul><ul><li># License: GPL v3 </li></ul></ul><ul><ul><li># Description: gestión de cumpleaños </li></ul></ul>Documentación ¡ documentando !
    15. 15. Sistemas de archivos <ul><ul><li>import os </li></ul></ul>Taller PyGTK imports <ul><ul><li>import sys </li></ul></ul><ul><ul><li>import gtk </li></ul></ul><ul><ul><li>import pygtk </li></ul></ul><ul><ul><li>import rdflib </li></ul></ul><ul><ul><li>import utils </li></ul></ul><ul><ul><li># llamadas al Sistema Operativo </li></ul></ul><ul><ul><li># objectos relacionados con el intérprete </li></ul></ul><ul><ul><li># python bindings para la biblioteca GTK </li></ul></ul><ul><ul><li># módulo pygtk </li></ul></ul><ul><ul><li># RDFlib </li></ul></ul><ul><ul><li># mi módulo de utilidades </li></ul></ul><ul><ul><li># python imports </li></ul></ul><ul><ul><li># bindings imports </li></ul></ul><ul><ul><li># 3d-parties imports </li></ul></ul><ul><ul><li># tus imports </li></ul></ul>
    16. 16. Sistemas de archivos Taller PyGTK Esqueleto del programa <ul><ul><li>class Programa: </li></ul></ul><ul><ul><li>def __init__(self): </li></ul></ul><ul><ul><li># inicializar entorno gráfico </li></ul></ul><ul><ul><li># inicializar estructuras de datos </li></ul></ul><ul><ul><li># conectar señales a callbacks </li></ul></ul><ul><ul><li>def callback_add/del_cumple(self, data): </li></ul></ul><ul><ul><li># get/set data from/to widgets </li></ul></ul><ul><ul><li>def callback_load/save_data(self, data): </li></ul></ul><ul><ul><li># input/output data </li></ul></ul><ul><ul><li>def other_methods(self): </li></ul></ul><ul><ul><li>pass </li></ul></ul><ul><ul><li># entry point </li></ul></ul><ul><ul><li>if __name__ == '__main__': </li></ul></ul><ul><ul><li>Programa() </li></ul></ul>
    17. 17. Sistemas de archivos Taller PyGTK Cargar el interfaz gráfico <ul><ul><li>class Widgets: </li></ul></ul><ul><ul><li>””” </li></ul></ul><ul><ul><li>Clase de ayuda para cargar los widgets del fichero glade </li></ul></ul><ul><ul><li>””” </li></ul></ul><ul><ul><li>def __init__(self,file): </li></ul></ul><ul><ul><li># load glade file </li></ul></ul><ul><ul><li>self.widgets = gtk.glade.XML(file) </li></ul></ul><ul><ul><li>def __getitem__(self,key): </li></ul></ul><ul><ul><li># diccionario de widgets </li></ul></ul><ul><ul><li>return self.widgets.get_widget(key) </li></ul></ul>class MisCumples: ””” Clase principal ””” def __init__(self): self.gui = Widgets(os.path.join('./', &quot;miscumples.glade&quot;)) # asignar widgets a variables self.window = self.gui.widgets.get_widget(&quot;winMain&quot;) ... self.mnusalir = self.gui.widgets.get_widget(&quot;mnuSalir&quot;)
    18. 18. Sistemas de archivos Taller PyGTK Conectar señales <ul><ul><li>Señales: conectar señales a los widgets </li></ul></ul><ul><ul><li>connections = { </li></ul></ul><ul><ul><li>'winMain/delete_event' : self.stop, </li></ul></ul><ul><ul><li>'btnAdd/clicked' : self.add_cumple, </li></ul></ul><ul><ul><li>'btnDel/clicked' : self.del_cumple, </li></ul></ul><ul><ul><li>'btnHelp/clicked' : self.stop, </li></ul></ul><ul><ul><li>'mnuSalir/activate' : self.stop </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>#connect signals </li></ul></ul><ul><ul><li>for wid_con, func in connections.iteritems(): </li></ul></ul><ul><ul><li>wid, con = wid_con.split('/') </li></ul></ul><ul><ul><li>try: </li></ul></ul><ul><ul><li>self.gui[wid]. connect(con,func) </li></ul></ul><ul><ul><li>except Exception, e: </li></ul></ul><ul><ul><li>print &quot;Error connecting signals: %s&quot; % e </li></ul></ul>
    19. 19. Sistemas de archivos Taller PyGTK Widgets <ul><ul><li>Treeview : muestra el contenido en forma de árbol. Consta de: </li></ul></ul><ul><ul><li>- widget: tres columnas (mes, día, nombre) </li></ul></ul><ul><ul><li># TreeStore </li></ul></ul><ul><ul><li>self.cumples = self.gui.widgets.get_widget(&quot;trvCumples&quot;) </li></ul></ul><ul><ul><li># column month </li></ul></ul><ul><ul><li>column_month = gtk.TreeViewColumn ('mes') </li></ul></ul><ul><ul><li>self.cumples.append_column(column_month) </li></ul></ul><ul><ul><li>cell_month = gtk.CellRendererText () </li></ul></ul><ul><ul><li>column_month.pack_start(cell_month, True) </li></ul></ul><ul><ul><li>column_month.add_attribute (cell_month, 'text', 0) </li></ul></ul><ul><ul><li>self.cumples.set_search_column(0) </li></ul></ul><ul><ul><li>- modelo de datos: </li></ul></ul><ul><ul><li># treeview model </li></ul></ul><ul><ul><li>self.model = gtk.TreeStore ( </li></ul></ul><ul><ul><li>gobject.TYPE_STRING, # month </li></ul></ul><ul><ul><li>gobject.TYPE_STRING, # day </li></ul></ul><ul><ul><li>gobject.TYPE_STRING, # name </li></ul></ul><ul><ul><li>) </li></ul></ul>
    20. 20. Sistemas de archivos Taller PyGTK Widgets <ul><ul><li>gtk.Calendar : muestra un calendario navegable </li></ul></ul><ul><ul><li>self.calendar = self.gui.widgets.get_widget(&quot;calBirthdays&quot;) # Calendar </li></ul></ul><ul><ul><li>month, day, name = self.calendar. get_date () </li></ul></ul><ul><ul><li>gtk.Entry : entrada de datos </li></ul></ul><ul><ul><li>self.name = self.gui.widgets.get_widget(&quot;etyName&quot;) # Name entry </li></ul></ul><ul><ul><li>name = self.name. get_text () </li></ul></ul><ul><ul><li>gtk.Button : botón pulsable. Emite la señal ' clicked ' </li></ul></ul><ul><ul><li>self.btnadd = self.gui.widgets.get_widget(&quot;btnAdd&quot;) # Add button </li></ul></ul><ul><ul><li>'btnAdd/clicked' : self.add_cumple, </li></ul></ul><ul><ul><li>def add_cumple(self, data=None): # callback para la señal </li></ul></ul><ul><ul><li>pass </li></ul></ul>
    21. 21. Taller PyGTK
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×