Taller PyGTK

Embed Size (px)

Citation preview

Taller PyGTK

Taller de aprendizaje

Toms Vrseda ([email protected])

LinuxEC

Taller PyGTK

plataforma de desarrollo

lenguaje de programacin

toolkit grfico

Taller PyGTK

GNOME, plataforma de desarrollo

Guas: prcticas comunes para escribir cdigo o disear interfaces

Referencias: contienen las API de las bibliotecas y los estndares que se usan en la plataforma GNOME

Herramientas de desarrollo: Constructores de interfaces grficos, un sistema de ayuda integrado, editores, herramientas de informe de errores, debuggers, sistema de documentacin, etc. ...

Tipos de particiones

Taller PyGTK

PYTHON, lenguaje de programacin

Caractersticas:

Software Libre

Maduro

+14 aos

diseo elegante y robusto

Fcil de aprender

se lee como pseudocdigo

sintaxis sencilla

Portable

Unix, Windows, Mac, ...

Propiedades:

Compila a bytecode interpretado

Multi-paradigma

Todo son objetos

Pero puede usarse de manera procedural

Mdulos, clases, funciones, generadores

Biblioteca estndar extensa

Manejo moderno de errores

Tipos de alto nivel

Interprete interactivo

Bases de datos

MySQL, PostgresSQL, MS SQL, Informix, DB/2, Sybase

Interfaces grficas

Qt, GTK, win32, wxWidgets, Cairo

Frameworks Web

Django, Turbogears, Zope, Plone, webpy

Tipos de particiones

Taller PyGTK

GTK, toolkit grfico

Estabilidad

+10 aos

Slida comunidad de usuarios

Multiplataforma

GNU/Linux, Mac, Windows, ...

Bindings

C++, C#, Java, Python, Perl, R, Lua, Guile, Ruby, PHP, Ada, Ocaml, Haskell, S-Lang, D

Mvil

Nokia 770 / N800 / N810

One Laptop Per Child Project

OpenMoko

Interfaces

Gran variedad de widgets

Accommodating

Look and feel nativo

Soporte para themes

Thread seguros

Orientacin a objetos

Internationalizacin

Localizacin

Accesibilidad

Soporte para texto bidireccional

Soporte UTF8

Documentacin

Foundations

Sistemas de objetos y tipos, bucle principal, plugins, threads, timers, manejo de memoria,

listas, tablas hash, arrays, rboles, manejo de cadenas, XML parser, Base64, ...

Taller PyGTK

GTK, toolkit grfico

Widgets

Eventos y seales

Callbacks

Contenedores

Disposicin de los widgets

Conceptos:

Taller PyGTK

GTK, toolkit grfico

Widgets: componente grfico de una ventana

Taller PyGTK

GTK, toolkit grfico

Signalsmensajes emitidos por interaccin con los widgetstoggled, clicked, destroyed...

Signal handlers

espera hasta que llega unas seal especfica

y ejecuta una funcin en respuesta

Seales y eventos

Eventos

mensajes emitidos sin interaccin con los widgets

button_press_event, destroy_event, key_press_event, etc.

GTK, toolkit grfico

funcin ejecutada por el manejador de seales

en respuesta a una seal

Taller PyGTK

Callbacks

GTK, toolkit grfico

Un widget no se dispone en ningn orden. Se aadee a widgets especficos llamados contenedores

Taller PyGTK

Disposicin de los widgets

Un widget debe ser aadido a un contenedor que a su vez puede pertenecer a otro contenedor

Sistemas de archivos

Taller PyGTK

- hablar

+ cdigo

Un sistema de archivos son los mtodos y estructuras de datos que un sistema operativo utiliza para seguir la pista de los archivos de un disco o particin; es decir, es la manera en la que se organizan los archivos en el disco.

Sistemas de archivos

Taller PyGTK

Un ejemplo sencillo

#!/usr/bin/env python# -*- coding: utf-8 -*-# File: basico.py# Author: Toms Vrseda# License: GPL v3# Description: ejemplo uso de pygtk

# Gtk bindingsimport gtk # gtk bindings

# callback button1def boton_uno(widget, data=None): print "Hola, soy el botn uno"

# callback button2def boton_dos(widget, data=None): print "Hola, soy el botn dos"

# create widgetswindow = gtk.Window() # main windowbutton1 = gtk.Button('Botn 1') # First buttonbutton2 = gtk.Button('Botn 2') # Second buttoncontainer = gtk.HBox() # container

# conectar sealeswindow.connect('destroy', gtk.main_quit)button1.connect('clicked', boton_uno)button2.connect('clicked', boton_dos)

# pack buttonscontainer.pack_start(button1)container.pack_end(button2)

# add container to top level windowwindow.add(container)

# show all and run!window.show_all()gtk.main()

Un sistema de archivos son los mtodos y estructuras de datos que un sistema operativo utiliza para seguir la pista de los archivos de un disco o particin; es decir, es la manera en la que se organizan los archivos en el disco.

Sistemas de archivos

Taller PyGTK

AplicacinGestor de cumpleaos

Objetivos de aprendizaje

aspectos bsicos de python y gtk

cargar interfaz grfica

uso de widgets y seales

entrada/salida de datos

Sistemas de archivos

#!/usr/bin/env python

Taller PyGTK

obligatorio

Ruta del intrprete de python

Soporte UTF-8

Fichero cdigo fuente

Autor programa

Licencia

Descripcin

Comenzamos...

1. Crear y editar el fichero fuente miscumples.py:

# -*- coding: utf-8 -*-

# File: miscumples.py

# Author: Toms Vrseda

# License: GPL v3

# Description: gestin de cumpleaos

Documentacin

documentando!

Sistemas de archivos

import os

Taller PyGTK

imports

import sys

import gtk

import pygtk

import rdflib

import utils

# llamadas al Sistema Operativo

# objectos relacionados con el intrprete

# python bindings para la biblioteca GTK

# mdulo pygtk

# RDFlib

# mi mdulo de utilidades

# python imports

# bindings imports

# 3d-parties imports

# tus imports

Sistemas de archivos

Taller PyGTK

Esqueleto del programa

class Programa:

def __init__(self):

# inicializar entorno grfico

# inicializar estructuras de datos

# conectar seales a callbacks

def callback_add/del_cumple(self, data):

# get/set data from/to widgets

def callback_load/save_data(self, data):

# input/output data

def other_methods(self):

pass

# entry point

if __name__ == '__main__':

Programa()

Sistemas de archivos

Taller PyGTK

Cargar el interfaz grfico

class Widgets:

Clase de ayuda para cargar los widgets del fichero glade

def __init__(self,file):

# load glade file

self.widgets = gtk.glade.XML(file)

def __getitem__(self,key):

# diccionario de widgets

return self.widgets.get_widget(key)

class MisCumples:Clase principaldef __init__(self):self.gui = Widgets(os.path.join('./', "miscumples.glade"))# asignar widgets a variables self.window = self.gui.widgets.get_widget("winMain") ... self.mnusalir = self.gui.widgets.get_widget("mnuSalir")

Sistemas de archivos

Taller PyGTK

Conectar seales

Seales: conectar seales a los widgets

connections = {

'winMain/delete_event':self.stop,

'btnAdd/clicked':self.add_cumple,

'btnDel/clicked':self.del_cumple,

'btnHelp/clicked':self.stop,

'mnuSalir/activate':self.stop

}

#connect signals

for wid_con, func in connections.iteritems():

wid, con = wid_con.split('/')

try:

self.gui[wid].connect(con,func)

except Exception, e:

print "Error connecting signals: %s" % e

Sistemas de archivos

Taller PyGTK

Widgets

Treeview: muestra el contenido en forma de rbol. Consta de:

- widget: tres columnas (mes, da, nombre)

# TreeStore

self.cumples = self.gui.widgets.get_widget("trvCumples")

# column month

column_month = gtk.TreeViewColumn('mes')

self.cumples.append_column(column_month)

cell_month = gtk.CellRendererText()

column_month.pack_start(cell_month, True)

column_month.add_attribute(cell_month, 'text', 0)

self.cumples.set_search_column(0)

- modelo de datos:

# treeview model

self.model = gtk.TreeStore(

gobject.TYPE_STRING, # month

gobject.TYPE_STRING, # day

gobject.TYPE_STRING, # name

)

Sistemas de archivos

Taller PyGTK

Widgets

gtk.Calendar: muestra un calendario navegable

self.calendar = self.gui.widgets.get_widget("calBirthdays") # Calendar

month, day, name = self.calendar.get_date()

gtk.Entry: entrada de datos

self.name = self.gui.widgets.get_widget("etyName") # Name entry

name = self.name.get_text()

gtk.Button: botn pulsable. Emite la seal 'clicked'

self.btnadd = self.gui.widgets.get_widget("btnAdd") # Add button

'btnAdd/clicked' : self.add_cumple,

def add_cumple(self, data=None): # callback para la seal

pass

Taller PyGTK

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamalla

Toinen jsennystaso

Kolmas jsennystaso

Neljs jsennystaso

Viides jsennystaso

Kuudes jsennystaso

Seitsems jsennystaso

Kahdeksas jsennystaso

Yhdekss jsennystaso