introducción a pyqt
DESCRIPTION
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Introduccion¿Donde esta Qt?
VIDEO!
6 of 30
IntroduccionHerramientas de Ayuda
� Qt-Creator
7 of 30
IntroduccionHerramientas de Ayuda
� Designer
8 of 30
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
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
ConceptosOO
� Es importante que recordemos la Orientacion a Objetos.
� Es de vital importancia, para Python y para Qt.
11 of 30
ConceptosJerarquıa
� Su estructura es modular.� > 300 clases.� > 6000 metodos.
� En los cuales podemos encontrar:� QtCore� QtGui� QtSvg� QtSQL� ...
12 of 30
ConceptosComportamiento
� Tenemos Objetos (elementos)
� Tenemos Senales (por cada elemento)
13 of 30
ConceptosComportamiento
14 of 30
ConceptosComportamiento
� Cada objeto tiene una o mas senales:� connect()� valueChanged()� textChanged()� accepted()� triggered()� ...
15 of 30
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
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
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
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
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
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
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
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
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
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
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
EjemplosopenWall
Veamos el codigo!
27 of 30
EjemplosµBot Interface
Veamos el codigo!
28 of 30
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
¿Preguntas?
30 of 30