Introducción a PyQt

45
Introducci´on a PyQt “¿Qui´ en dijo que crear e implementar interfaces es dificil?” Cristi´ an D. Maureira Fredes [email protected] Comunidad KDE Chile y Arch Linux Chile 1 de noviembre de 2010

description

 

Transcript of Introducción a PyQt

Page 1: Introducción a PyQt

Introduccion a PyQt“¿Quien dijo que crear e implementar interfaces es dificil?”

Cristian D. Maureira [email protected]

Comunidad KDE Chile y

Arch Linux Chile

1 de noviembre de 2010

Page 2: Introducción a PyQt

Introduccion

� Desarrollo de Software

� Diseno.� Implementacion.

� A veces puede ser una pesadilla!

� ...entonces Qt viene en nuestro rescate.

� y todo es mejor aun con Python.

2 of 30

Page 3: Introducción a PyQt

Introduccion

� Desarrollo de Software� Diseno.

� Implementacion.

� A veces puede ser una pesadilla!

� ...entonces Qt viene en nuestro rescate.

� y todo es mejor aun con Python.

2 of 30

Page 4: Introducción a PyQt

Introduccion

� Desarrollo de Software� Diseno.� Implementacion.

� A veces puede ser una pesadilla!

� ...entonces Qt viene en nuestro rescate.

� y todo es mejor aun con Python.

2 of 30

Page 5: Introducción a PyQt

Introduccion

� Desarrollo de Software� Diseno.� Implementacion.

� A veces puede ser una pesadilla!

� ...entonces Qt viene en nuestro rescate.

� y todo es mejor aun con Python.

2 of 30

Page 6: Introducción a PyQt

Introduccion

� Desarrollo de Software� Diseno.� Implementacion.

� A veces puede ser una pesadilla!

� ...entonces Qt viene en nuestro rescate.

� y todo es mejor aun con Python.

2 of 30

Page 7: Introducción a PyQt

Introduccion

� Desarrollo de Software� Diseno.� Implementacion.

� A veces puede ser una pesadilla!

� ...entonces Qt viene en nuestro rescate.

� y todo es mejor aun con Python.

2 of 30

Page 8: Introducción a PyQt

Introduccion¿Que es Python?

� Lenguaje de programacion de alto nivel.

� Guido van Rossum (fines de los ochenta).

� Nace con la idea de poder tener un codigo legible (simple).

� Multiparadigma (OO,Imperativo,Funcional).

� Scripting (interpretado).

� Tipificado dinamico.

� Multiplataforma, Open Source, ...

3 of 30

Page 9: Introducción a PyQt

Introduccion¿Que es Python?

� Lenguaje de programacion de alto nivel.

� Guido van Rossum (fines de los ochenta).

� Nace con la idea de poder tener un codigo legible (simple).

� Multiparadigma (OO,Imperativo,Funcional).

� Scripting (interpretado).

� Tipificado dinamico.

� Multiplataforma, Open Source, ...

3 of 30

Page 10: Introducción a PyQt

Introduccion¿Que es Python?

� Lenguaje de programacion de alto nivel.

� Guido van Rossum (fines de los ochenta).

� Nace con la idea de poder tener un codigo legible (simple).

� Multiparadigma (OO,Imperativo,Funcional).

� Scripting (interpretado).

� Tipificado dinamico.

� Multiplataforma, Open Source, ...

3 of 30

Page 11: Introducción a PyQt

Introduccion¿Que es Python?

� Lenguaje de programacion de alto nivel.

� Guido van Rossum (fines de los ochenta).

� Nace con la idea de poder tener un codigo legible (simple).

� Multiparadigma (OO,Imperativo,Funcional).

� Scripting (interpretado).

� Tipificado dinamico.

� Multiplataforma, Open Source, ...

3 of 30

Page 12: Introducción a PyQt

Introduccion¿Que es Python?

� Lenguaje de programacion de alto nivel.

� Guido van Rossum (fines de los ochenta).

� Nace con la idea de poder tener un codigo legible (simple).

� Multiparadigma (OO,Imperativo,Funcional).

� Scripting (interpretado).

� Tipificado dinamico.

� Multiplataforma, Open Source, ...

3 of 30

Page 13: Introducción a PyQt

Introduccion¿Que es Python?

� Lenguaje de programacion de alto nivel.

� Guido van Rossum (fines de los ochenta).

� Nace con la idea de poder tener un codigo legible (simple).

� Multiparadigma (OO,Imperativo,Funcional).

� Scripting (interpretado).

� Tipificado dinamico.

� Multiplataforma, Open Source, ...

3 of 30

Page 14: Introducción a PyQt

Introduccion¿Que es Python?

� Lenguaje de programacion de alto nivel.

� Guido van Rossum (fines de los ochenta).

� Nace con la idea de poder tener un codigo legible (simple).

� Multiparadigma (OO,Imperativo,Funcional).

� Scripting (interpretado).

� Tipificado dinamico.

� Multiplataforma, Open Source, ...

3 of 30

Page 15: Introducción a PyQt

Introduccion¿Que es Qt?

� Biblioteca multiplataforma.

� Es un framework desarrollado en C++.

� Permite desarrollo de UI, DB, XML, WebKit, Multimedia,Networking, OpenGL, scripting, etc.

� NO es solo una biblioteca grafica. (como otras.......

� ..................GTK)

4 of 30

Page 16: Introducción a PyQt

Introduccion¿Que es Qt?

� Biblioteca multiplataforma.

� Es un framework desarrollado en C++.

� Permite desarrollo de UI, DB, XML, WebKit, Multimedia,Networking, OpenGL, scripting, etc.

� NO es solo una biblioteca grafica. (como otras.......

� ..................GTK)

4 of 30

Page 17: Introducción a PyQt

Introduccion¿Que es Qt?

� Biblioteca multiplataforma.

� Es un framework desarrollado en C++.

� Permite desarrollo de UI, DB, XML, WebKit, Multimedia,Networking, OpenGL, scripting, etc.

� NO es solo una biblioteca grafica. (como otras.......

� ..................GTK)

4 of 30

Page 18: Introducción a PyQt

Introduccion¿Que es Qt?

� Biblioteca multiplataforma.

� Es un framework desarrollado en C++.

� Permite desarrollo de UI, DB, XML, WebKit, Multimedia,Networking, OpenGL, scripting, etc.

� NO es solo una biblioteca grafica. (como otras.......

� ..................GTK)

4 of 30

Page 19: Introducción a PyQt

Introduccion¿Que es Qt?

� Biblioteca multiplataforma.

� Es un framework desarrollado en C++.

� Permite desarrollo de UI, DB, XML, WebKit, Multimedia,Networking, OpenGL, scripting, etc.

� NO es solo una biblioteca grafica. (como otras.......

� ..................GTK)

4 of 30

Page 20: Introducción a PyQt

IntroduccionTenemos Qt con distintos sabores

� PyQt - Bindings GPL/Comercial para Python (Riverbank)

� PySide - LGPL bindings para Python (OpenBossa/Nokia)

� Qyoto - Bindings para C# y .NET

� QtRuby - Bindings para Ruby.

� Qt Jambi - Bindings para Java.

� Ada, Perl, Pascal, PHP, Haskell, Lua, Dao, D.

5 of 30

Page 21: Introducción a PyQt

Introduccion¿Donde esta Qt?

VIDEO!

6 of 30

Page 22: Introducción a PyQt

IntroduccionHerramientas de Ayuda

� Qt-Creator

7 of 30

Page 23: Introducción a PyQt

IntroduccionHerramientas de Ayuda

� Designer

8 of 30

Page 24: Introducción a PyQt

IntroduccionHello World

import s y sfrom PyQt4 . QtGui import QLabel , Q A p p l i c a t i o n

app = Q A p p l i c a t i o n ( s y s . a r g v )l a b e l = QLabel ( ” H e l l o World ” )l a b e l . show ( )s y s . e x i t ( app . e x e c ( ) )

9 of 30

Page 25: Introducción a PyQt

IntroduccionSimple

import s y sfrom PyQt4 import QtGui

app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )w i d g e t = QtGui . QWidget ( )w i d g e t . r e s i z e (250 , 150)w i d g e t . s e t W i n d o w T i t l e ( ’ s i m p l e ’ )w i d g e t . show ( )s y s . e x i t ( app . e x e c ( ) )

10 of 30

Page 26: Introducción a PyQt

ConceptosOO

� Es importante que recordemos la Orientacion a Objetos.

� Es de vital importancia, para Python y para Qt.

11 of 30

Page 27: Introducción a PyQt

ConceptosJerarquıa

� Su estructura es modular.� > 300 clases.� > 6000 metodos.

� En los cuales podemos encontrar:� QtCore� QtGui� QtSvg� QtSQL� ...

12 of 30

Page 28: Introducción a PyQt

ConceptosComportamiento

� Tenemos Objetos (elementos)

� Tenemos Senales (por cada elemento)

13 of 30

Page 29: Introducción a PyQt

ConceptosComportamiento

14 of 30

Page 30: Introducción a PyQt

ConceptosComportamiento

� Cada objeto tiene una o mas senales:� connect()� valueChanged()� textChanged()� accepted()� triggered()� ...

15 of 30

Page 31: Introducción a PyQt

EjemplosLineas

import s y sfrom PyQt4 import QtGuifrom l i n e a s import ∗

c l a s s myGUI( QtGui . QWidget ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = U i L i n e s ( )s e l f . u i . s e tupU i ( s e l f )s e l f . u i . but ton . c l i c k e d . connect ( s e l f . buttonChange )

def buttonChange ( s e l f ) :t e x t = s e l f . u i . l i n e . t e x t ( )s e l f . u i . l a b e l . s e tTex t ( t e x t )s e l f . u i . l i n e . s e tTex t ( ’ ’ )

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

16 of 30

Page 32: Introducción a PyQt

EjemplosListas

import s y sfrom PyQt4 import QtGuifrom l i s t a s import ∗

c l a s s myGUI( QtGui . QWidget ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = U i L i s t a s ( )s e l f . u i . s e tupU i ( s e l f )s e l f . l i n e a s = [ ]s e l f . u i . addButton . c l i c k e d . connect ( s e l f . addButtonPressed )s e l f . u i . de lBut ton . c l i c k e d . connect ( s e l f . d e lBu t t onP r e s s ed )s e l f . u i . c l o s eBu t t on . c l i c k e d . connect ( s e l f . c l o s e )

def addButtonPressed ( s e l f ) :t e x t = s e l f . u i . l i n e . t e x t ( )s e l f . l i n e a s . append ( t e x t )s e l f . u i . l i s t . addItem ( t e x t )s e l f . u i . l i n e . s e tTex t ( ’ ’ )

def de lBu t t onP r e s s ed ( s e l f ) :i tem = s e l f . u i . l i s t . c u r r e n t I t em ( )t e x t = item . t e x t ( )j=0f o r i i n s e l f . l i n e a s :

i f i == t e x t :de l s e l f . l i n e a s [ j ]

j = j + 1s e l f . u i . l i s t . c l e a r ( )f o r i i n s e l f . l i n e a s :

s e l f . u i . l i s t . addItem ( i )

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

17 of 30

Page 33: Introducción a PyQt

EjemplosSeleccion

import s y sfrom PyQt4 import QtCore , QtGuifrom s e l e c c i o n import ∗

c l a s s myGUI( QtGui . QWidget ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = U i s e l e c c i o n ( )s e l f . u i . s e tupU i ( s e l f )s e l f . u i . addButton . c l i c k e d . connect ( s e l f . a p p l y F i l t e r )s e l f . f i l l ( )

def f i l l ( s e l f ) :s e l f . nombres = [ ’ C r i s t i a n ’ ,\

’ I g n a c i o ’ ,\’ G a b r i e l ’ ,\’ C h r i s t o p h e r ’ ,\’ Arna ldo ’ ,\’ Jaime ’ ,\’ S e r g i o ’ ,\’ Yonathan ’ ]

f o r i i n s e l f . nombres :s e l f . u i . comboBox . addItem ( i )

s e l f . p e r s ona s = [ ’ Yonathan Dossow ’ ,\’ Jaime Pe ldoza ’ ,\’ Jaime Oyarzun ’ ,\’ Arna ldo Garat ’ ,\’ S e r g i o Mora les ’ ,\’ G a b r i e l Zamora ’ ,\’ S e r g i o F r e i r e ’ ,\’ G a b r i e l Mora les ’ ,\’ C r i s t i a n Mora les ’ ,\’ G a b r i e l Perez ’ ,\’ C h r i s t o p h e r Fernandez ’ ,\’ I g n a c i o Fernandes ’ ,\’ Jaime Oyarzun ’ ,\’ C h r i s t o p h e r Oyarzun ’ ,\’ I g n a c i o V i l l a c u r a ’ ]

f o r i i n s e l f . p e r s ona s :s e l f . u i . l i s t . addItem ( i )

def a p p l y F i l t e r ( s e l f ) :t e x t = s e l f . u i . comboBox . c u r r e n tTex t ( )t e x t = QtCore . QStr ing ( t e x t )tmpL i s t = [ ]f o r i i n s e l f . p e r s ona s :

i f t e x t i n QtCore . QStr ing ( i ) :tmpL i s t . append ( i )

s e l f . u i . l i s t . c l e a r ( )f o r i i n tmpL i s t :

s e l f . u i . l i s t . addItem ( i )

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

18 of 30

Page 34: Introducción a PyQt

EjemplosFuentes

import s y sfrom PyQt4 import QtGuifrom f o n t s import ∗

c l a s s myGUI( QtGui . QWidget ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = U i f o n t s ( )s e l f . u i . s e tupU i ( s e l f )s e l f . u i . fontComboBox . cur rentFontChanged . connect ( s e l f . changeFont )

def changeFont ( s e l f ) :s e l f . u i . f o n t . s e tFon t ( s e l f . u i . fontComboBox . c u r r e n tFon t ( ) )

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

19 of 30

Page 35: Introducción a PyQt

EjemplosCalendario

import s y sfrom PyQt4 import QtGuifrom c a l e n d a r import ∗

c l a s s myGUI( QtGui . QWidget ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = U i Ca l enda r ( )s e l f . u i . s e tupU i ( s e l f )s e l f . u i . c a l enda rWidge t . c l i c k e d . connect ( s e l f . changeDate )

def changeDate ( s e l f ) :s e l f . u i . l i n e E d i t . s e tTex t ( s e l f . u i . c a l enda rWidge t . s e l e c t e dDa t e ( ) . t o S t r i n g ( ) )

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

20 of 30

Page 36: Introducción a PyQt

EjemplosTabs

import s y sfrom PyQt4 import QtGuifrom t ab s import ∗

c l a s s myGUI( QtGui . QWidget ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = U i t a b s ( )s e l f . u i . s e tupU i ( s e l f )

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

21 of 30

Page 37: Introducción a PyQt

EjemplosFormulario

import os , s y sfrom PyQt4 import QtCore , QtGui , Qtfrom f o rmu l a r i o import ∗

c l a s s myGUI( QtGui . QWidget ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = Ui fo rm ( )s e l f . u i . s e tupU i ( s e l f )

s e l f . s e x , s e l f . name = None , Nones e l f . day , s e l f . month , s e l f . y e a r = None , None , Nones e l f . u i . male . c l i c k e d . connect ( s e l f . changeRadioMale )s e l f . u i . f ema l e . c l i c k e d . connect ( s e l f . changeRadioFemale )s e l f . u i . name . textChanged . connect ( s e l f . changeName )s e l f . u i . day . va lueChanged . connect ( s e l f . changeDay )s e l f . u i . month . va lueChanged . connect ( s e l f . changeMonth )s e l f . u i . y e a r . va lueChanged . connect ( s e l f . changeYear )s e l f . u i . buttonBox . accep ted . connect ( s e l f . answer )s e l f . u i . buttonBox . r e j e c t e d . connect ( s e l f . c l o s e )s e l f . u i . y e a r . setMaximum (2010)

def changeRadioMale ( s e l f ) :s e l f . s e x = ”Hombre”

def changeRadioFemale ( s e l f ) :s e l f . s e x = ”Mujer ”

def changeName ( s e l f ) :#p r i n t ”name change to : ”+ s e l f . u i . name . t e x t ( )s e l f . name = s e l f . u i . name . t e x t ( )

def changeDay ( s e l f ) :s e l f . day = s e l f . u i . day . v a l u e ( )

def changeMonth ( s e l f ) :s e l f . month = s e l f . u i . month . v a l u e ( )

def changeYear ( s e l f ) :s e l f . y e a r = s e l f . u i . y e a r . v a l u e ( )

def answer ( s e l f ) :i n f o = ”Name : ”+s e l f . name+\

”\nSexo : ”+s e l f . s ex+\”\nF . nac : ”+s t r ( s e l f . day)+”/”+\

s t r ( s e l f . month)+”/”+s t r ( s e l f . y e a r )w = QtGui . QMessageBox . q u e s t i o n ( s e l f ,\

’ I n f o rmac i on ’ ,\i n f o , QtGui . QMessageBox . Yes ,\QtGui . QMessageBox .No)

i f w == QtGui . QMessageBox . Yes :s e l f . c l o s e

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

22 of 30

Page 38: Introducción a PyQt

EjemplosMenu

import os , s y sfrom PyQt4 import QtCore , QtGui , Qtfrom menu import ∗

c l a s s myGUI( QtGui . QMainWindow ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QWidget . i n i t ( s e l f , p a r en t )s e l f . u i = Ui MainWindow ( )s e l f . u i . s e tupU i ( s e l f )s e l f . u i . a c t i o nTe s t . t r i g g e r e d . connect ( s e l f . t e s t A c t i o n )s e l f . u i . a c t i o n E x i t . t r i g g e r e d . connect ( s e l f . c l o s e )s e l f . u i . ac t i onAbout . t r i g g e r e d . connect ( s e l f . aboutAct i on )

def t e s t A c t i o n ( s e l f ) :p r i n t ” t e s t ”

def aboutAct ion ( s e l f ) :p r i n t ” about ”

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )myapp = myGUI ( )myapp . show ( )s y s . e x i t ( app . e x e c ( ) )

23 of 30

Page 39: Introducción a PyQt

EjemplosDrag and Drop

import s y sfrom PyQt4 import QtGui

c l a s s DragDrop ( QtGui . QDialog ) :def i n i t ( s e l f , p a r en t=None ) :

QtGui . QDialog . i n i t ( s e l f , p a r en t )s e l f . r e s i z e (180 , 60)e d i t = QtGui . QL ineEd i t ( ’ ’ , s e l f )e d i t . s e tDragEnab l ed ( True )e d i t . move (20 , 20)s c r e e n = QtGui . QDesktopWidget ( ) . sc reenGeomet ry ( )s i z e = s e l f . geometry ( )

i f name == ” ma i n ” :app = QtGui . QApp l i c a t i on ( s y s . a rgv )i c on = DragDrop ( )i c on . show ( )s y s . e x i t ( app . e x e c ( ) )

24 of 30

Page 40: Introducción a PyQt

EjemplosMultimedia - Audio

import s y sfrom PyQt4 import QtGuifrom PyQt4 . phonon import Phonon

app = QtGui . QApp l i c a t i on ( s y s . a rgv )u r l=” A i r b e a tP r o j e c t−AirbeatOne .mp3”w = QtGui . QWidget ( )aud io = Phonon . c r e a t e P l a y e r ( Phonon . MusicCategory ,

Phonon . MediaSource ( u r l ) )w. setMinimumSize (100 ,100)w. show ( )aud io . p l a y ( )s y s . e x i t ( app . e x e c ( ) )

25 of 30

Page 41: Introducción a PyQt

EjemplosMultimedia - Video

import s y sfrom PyQt4 import QtGuifrom PyQt4 . phonon import Phonon

app = QtGui . QApp l i c a t i on ( s y s . a rgv )u r l=” qt . f l v ”w = QtGui . QWidget ( )p l a y e r = Phonon . V i d eoP l a y e r ( Phonon . VideoCategory ,w)p l a y e r . l o ad ( Phonon . MediaSource ( u r l ) )w. setMinimumSize (400 ,400)topLayout = QtGui . QVBoxLayout (w)topLayout . addWidget ( p l a y e r )w. s e tLayou t ( topLayout )w. show ( )p l a y e r . p l a y ( )s y s . e x i t ( app . e x e c ( ) )

26 of 30

Page 42: Introducción a PyQt

EjemplosopenWall

Veamos el codigo!

27 of 30

Page 43: Introducción a PyQt

EjemplosµBot Interface

Veamos el codigo!

28 of 30

Page 44: Introducción a PyQt

Conclusiones

� C++ es un muy buen lenguaje, pero Python es mas simple.

� Qt nos ofrece una amplia cantidad de Areas.

� Al unir dos elementos simples, obtenemos algo genial.

� No es solo un juguete, se pueden hacer cosas serias.

� Abundan tutoriales en la red.

� Buena documentacion.

� Facil de aprender.

29 of 30

Page 45: Introducción a PyQt

¿Preguntas?

30 of 30