Your SlideShare is downloading. ×
0
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Taller PyGTK
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Taller PyGTK

1,512

Published on

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

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,512
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
50
Comments
1
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Transcript

    • 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. Taller PyGTK plataforma de desarrollo lenguaje de programación toolkit gráfico
    • 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. 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. 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. 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. Taller PyGTK GTK , toolkit gráfico Widgets: componente gráfico de una ventana
    • 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. 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. 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. Sistemas de archivos Taller PyGTK - hablar + código
    • 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. 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. 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. 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. 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. 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. 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. 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. 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. Taller PyGTK

    ×