creación de aplicaciones gráficas sencillas

Upload: aprender-libre

Post on 07-Apr-2018

238 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    1/25

    Creacin de Aplicaciones grficassencillas

    Pablo Barrera [email protected]://gsyc.info/~barrera

    Grupo de Usuarios de Linuxhttp://gul.uc3m.es

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    2/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    2

    Por favor apaguen sus terminales de comunicacin

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    3/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    3

    Aplicaciones grficas

    Cada da son ms necesariasEs una parte muy importante del resultado final

    Motivos frikis

    ...Pero nunca tienes tiempo para aprender

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    4/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    4

    Situacin actual

    Hay muchas posibilidadesGTK+

    Qt

    TK

    WxWindows

    Motif

    Xforms

    Xlib

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    5/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    5

    Por qu PyGTK?

    Es totalmente libreEs fcil de aprender

    Lo que aprendes sirve en otros lenguajes

    Mucha documentacin y tutorialesQueda bonito

    Python es introspectivo

    Python es de alto nivel

    Puede usar libglade

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    6/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    6

    Herramientas

    Emacs (o lo que sea) Glade y libglade Python Devhelp (con libro de GTK+)

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    7/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    7

    GTK+

    Gimp ToolkitUsada por Gnome

    Widget

    Pseudo Orientada a objetos

    Pensada para C

    Muchos recubrimientos

    C++

    Python

    Java

    Mono

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    8/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    8

    Gtk+

    TemasGDK

    Pango

    Drag and Drop

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    9/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    9

    Partes de Gtk+

    WidgetSeales

    Callbacks

    Main_loop

    callback

    Boton1

    Main Loop

    on_boton1_clickedcallback

    Boton2 on_boton2_clickedclicked

    clicked

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    10/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    10

    Widgets

    JerarquaOrientados a Objetos

    Ventana

    Contenedores

    Cualquier Widget

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    11/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    11

    Glade

    Entorno grficoVentanas, Widgets y Seales

    Guarda la informacin en XML

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    12/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    12

    Comenzado una interfaz

    Colocar una o varias ventanasColocar sus contenedores y elementos

    Cambiar los nombres

    Ajustar las propiedades (margen, tamao,etc)

    Aadir las seales y los manejadores

    Aadir seal de destruccin

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    13/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    13

    Tirando cdigo

    Usamos mdulos: pygtk, gtk y gtk.glade

    #!/usr/bin/python

    import pygtk # for testing GTK version numberpygtk.require ('2.0')

    import gtk

    import gtk.glade

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    14/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    14

    Permite cargar el XML creado por Glade

    Permite conectar las seales a sus manejadores

    Cambiando el archivo Glade, cambia la interfaz

    self.xml = gtk.glade.XML('proyecto1.glade')

    libGlade

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    15/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    15

    Una clase para la interfaz grficaclass GUI:

    def __init__(self, oc):

    # Load glade file

    self.xml = gtk.glade.XML('proyecto1.glade')

    # Connect handlers of gui to this class

    self.xml.signal_autoconnect(self)

    # To access a widget -> self.xml.get_widget("name")

    # More information: help(gtk.glade.XML)

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    16/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    16

    ManejadoresMtodos para atender a las seales

    Dos tipos:

    1 parmetro de entrada (widget)

    2 parmetros de entrada (widget, evento)

    def on_window1_destroy(self, widget):

    gtk.main_quit()

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    17/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    17

    Cargamos el archivo Glade

    Conectamos los manejadores

    Comenzamos el bucle de GTK

    Para salir: gtk.main_quit()

    if __name__ == "__main__":

    gui = GUI()gtk.main()

    Arrancando la aplicacin

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    18/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    18

    Acceder a un widgetUsando gtk.glade y el archivo xml

    self.entryC = self.xml.get_widget("nombre")

    Tomndolo de los argumentos de entrada de losmanejadores

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    19/25

    18 Noviembre 2004, Pablo Barrera Gonzlez

    19

    TrucosUsar la ayuda de Python

    La introspeccin con los widgets

    Buscar ejemplos de GTK

    Usar Devhelp o el API de GTK+

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    20/25

    18 Noviembre 2004, Pablo Barrera Gonzlez20

    Funcionamiento del buclegtk.main() atiende a la lista de eventos

    gtk_main_iteration() ejecuta una nica iteracin

    Todo en un nico hilo

    El programa solo funciona en modo reactivo

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    21/25

    18 Noviembre 2004, Pablo Barrera Gonzlez21

    Funciones de tiempo ociosoCuando el gtk.main() tiene tiempo libre

    gtk.idle_add(funcin)

    Sigue siendo un nico hilo

    Debe devolver el control suficientemente rpido

    Mientras se ejecuta la funcin main_loop no atiende anuevas seales

    Debe devolver gtk.True

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    22/25

    18 Noviembre 2004, Pablo Barrera Gonzlez22

    Hilos de ejecucinEn general es mejor usar funciones idle ytemporizadores

    An as es posible usar hilos

    import thread

    gtk.threads_init()

    thread.start_new_thread(gui.run, ())

    gtk.threads_enter()

    gtk.main()gtk.threads_leave()

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    23/25

    18 Noviembre 2004, Pablo Barrera Gonzlez23

    Otras funcionalidadesArchivos po

    Teclas rpidas

    Funciona en Microsoft Windows

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    24/25

    18 Noviembre 2004, Pablo Barrera Gonzlez24

    Referenciashttp://www.gtk.org/

    http://www.pygtk.org/

    http://glade.gnome.org/

    http://primates.ximian.com/~sandino/python-glade/

    http://gruppy.sicem.biz/componentes#gazpacho

  • 8/6/2019 Creacin de Aplicaciones grficas sencillas

    25/25

    Preguntas?