1. Introducci´on a PyQt
“¿Qui´en dijo que crear e implementar interfaces es dificil?”
Cristi´an D. Maureira Fredes
saint@archlinux.cl
Comunidad KDE Chile y
Arch Linux Chile
1 de noviembre de 2010
10. Introducci´on
¿Qu´e es Python?
Lenguaje de programaci´on de alto nivel.
Guido van Rossum (fines de los ochenta).
Nace con la idea de poder tener un c´odigo legible (simple).
3 of 30
11. Introducci´on
¿Qu´e es Python?
Lenguaje de programaci´on de alto nivel.
Guido van Rossum (fines de los ochenta).
Nace con la idea de poder tener un c´odigo legible (simple).
Multiparadigma (OO,Imperativo,Funcional).
3 of 30
12. Introducci´on
¿Qu´e es Python?
Lenguaje de programaci´on de alto nivel.
Guido van Rossum (fines de los ochenta).
Nace con la idea de poder tener un c´odigo legible (simple).
Multiparadigma (OO,Imperativo,Funcional).
Scripting (interpretado).
3 of 30
13. Introducci´on
¿Qu´e es Python?
Lenguaje de programaci´on de alto nivel.
Guido van Rossum (fines de los ochenta).
Nace con la idea de poder tener un c´odigo legible (simple).
Multiparadigma (OO,Imperativo,Funcional).
Scripting (interpretado).
Tipificado din´amico.
3 of 30
14. Introducci´on
¿Qu´e es Python?
Lenguaje de programaci´on de alto nivel.
Guido van Rossum (fines de los ochenta).
Nace con la idea de poder tener un c´odigo legible (simple).
Multiparadigma (OO,Imperativo,Funcional).
Scripting (interpretado).
Tipificado din´amico.
Multiplataforma, Open Source, ...
3 of 30
17. Introducci´on
¿Qu´e es Qt?
Biblioteca multiplataforma.
Es un framework desarrollado en C++.
Permite desarrollo de UI, DB, XML, WebKit, Multimedia,
Networking, OpenGL, scripting, etc.
4 of 30
18. Introducci´on
¿Qu´e es Qt?
Biblioteca multiplataforma.
Es un framework desarrollado en C++.
Permite desarrollo de UI, DB, XML, WebKit, Multimedia,
Networking, OpenGL, scripting, etc.
NO es s´olo una biblioteca gr´afica. (como otras.......
4 of 30
19. Introducci´on
¿Qu´e es Qt?
Biblioteca multiplataforma.
Es un framework desarrollado en C++.
Permite desarrollo de UI, DB, XML, WebKit, Multimedia,
Networking, OpenGL, scripting, etc.
NO es s´olo una biblioteca gr´afica. (como otras.......
..................GTK)
4 of 30
20. Introducci´on
Tenemos 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
24. Introducci´on
Hello World
import sys
from PyQt4 . QtGui import QLabel , QApplication
app = QApplication ( sys . argv )
l a b e l = QLabel ( ” Hello World” )
l a b e l . show ()
sys . e x i t ( app . exec ( ) )
9 of 30
25. Introducci´on
Simple
import sys
from PyQt4 import QtGui
app = QtGui . QApplication ( sys . argv )
widget = QtGui . QWidget ()
widget . r e s i z e (250 , 150)
widget . setWindowTitle ( ’ simple ’ )
widget . show ()
sys . e x i t ( app . exec ( ) )
10 of 30
26. Conceptos
OO
Es importante que recordemos la Orientaci´on a Objetos.
Es de vital importancia, para Python y para Qt.
11 of 30
27. Conceptos
Jerarqu´ıa
Su estructura es modular.
> 300 clases.
> 6000 m´etodos.
En los cuales podemos encontrar:
QtCore
QtGui
QtSvg
QtSQL
...
12 of 30
31. Ejemplos
Lineas
import s y s
from PyQt4 import QtGui
from l i n e a s import ∗
c l a s s myGUI( QtGui . QWidget ) :
def i n i t ( s e l f , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = U i L i n e s ()
s e l f . u i . setupUi ( s e l f )
s e l f . u i . button . 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 . setText ( t e x t )
s e l f . u i . l i n e . setText ( ’ ’ )
i f name == ” m a i n ” :
app = QtGui . QApplication ( s y s . argv )
myapp = myGUI ()
myapp . show ()
s y s . e x i t ( app . exec ( ) )
16 of 30
32. Ejemplos
Listas
import s y s
from PyQt4 import QtGui
from l i s t a s import ∗
c l a s s myGUI( QtGui . QWidget ) :
def i n i t ( s e l f , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = U i L i s t a s ()
s e l f . u i . setupUi ( 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 . delButton . c l i c k e d . connect ( s e l f . delButtonPressed )
s e l f . u i . closeButton . 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 . setText ( ’ ’ )
def delButtonPressed ( s e l f ) :
item = s e l f . u i . l i s t . c u r r e n t I t e m ()
t e x t = item . t e x t ()
j=0
f o r i i n s e l f . l i n e a s :
i f i == t e x t :
del s e l f . l i n e a s [ j ]
j = j + 1
s e l f . u i . l i s t . c l e a r ()
17 of 30
33. Ejemplos
Seleccion
import s y s
from PyQt4 import QtCore , QtGui
from 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 , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = U i s e l e c c i o n ()
s e l f . u i . setupUi ( 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 ’ ,
’ Arnaldo ’ ,
’ 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 . personas = [ ’ Yonathan Dossow ’ ,
’ Jaime Peldoza ’ ,
’ Jaime Oyarzun ’ ,
’ Arnaldo Garat ’ ,
’ S e r g i o Morales ’ ,
18 of 30
34. Ejemplos
Fuentes
import s y s
from PyQt4 import QtGui
from f o n t s import ∗
c l a s s myGUI( QtGui . QWidget ) :
def i n i t ( s e l f , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = U i f o n t s ()
s e l f . u i . setupUi ( s e l f )
s e l f . u i . fontComboBox . currentFontChanged . connect ( s e l f . changeFont )
def changeFont ( s e l f ) :
s e l f . u i . f o n t . setFont ( s e l f . u i . fontComboBox . currentFont ( ) )
i f name == ” m a i n ” :
app = QtGui . QApplication ( s y s . argv )
myapp = myGUI ()
myapp . show ()
s y s . e x i t ( app . exec ( ) )
19 of 30
35. Ejemplos
Calendario
import s y s
from PyQt4 import QtGui
from 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 , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = Ui Calendar ()
s e l f . u i . setupUi ( s e l f )
s e l f . u i . calendarWidget . 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 . setText ( s e l f . u i . calendarWidget . s e l e c t e d D a t e ( ) . t o S t r i n g ( ) )
i f name == ” m a i n ” :
app = QtGui . QApplication ( s y s . argv )
myapp = myGUI ()
myapp . show ()
s y s . e x i t ( app . exec ( ) )
20 of 30
36. Ejemplos
Tabs
import s y s
from PyQt4 import QtGui
from tabs import ∗
c l a s s myGUI( QtGui . QWidget ) :
def i n i t ( s e l f , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = U i t a b s ()
s e l f . u i . setupUi ( s e l f )
i f name == ” m a i n ” :
app = QtGui . QApplication ( s y s . argv )
myapp = myGUI ()
myapp . show ()
s y s . e x i t ( app . exec ( ) )
21 of 30
37. Ejemplos
Formulario
import os , s y s
from PyQt4 import QtCore , QtGui , Qt
from f o r m u l a r i o import ∗
c l a s s myGUI( QtGui . QWidget ) :
def i n i t ( s e l f , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = Ui form ()
s e l f . u i . setupUi ( s e l f )
s e l f . sex , s e l f . name = None , None
s e l f . day , s e l f . month , s e l f . year = None , None , None
s 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 . female . 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 . valueChanged . connect ( s e l f . changeDay )
s e l f . u i . month . valueChanged . connect ( s e l f . changeMonth )
s e l f . u i . year . valueChanged . connect ( s e l f . changeYear )
s e l f . u i . buttonBox . accepted . 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 . year . setMaximum (2010)
def changeRadioMale ( s e l f ) :
s e l f . sex = ”Hombre”
def changeRadioFemale ( s e l f ) :
s e l f . sex = ” Mujer ”22 of 30
38. Ejemplos
Menu
import os , s y s
from PyQt4 import QtCore , QtGui , Qt
from menu import ∗
c l a s s myGUI( QtGui . QMainWindow ) :
def i n i t ( s e l f , parent=None ) :
QtGui . QWidget . i n i t ( s e l f , parent )
s e l f . u i = Ui MainWindow ()
s e l f . u i . setupUi ( s e l f )
s e l f . u i . a c t i o n T e 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 . actionAbout . t r i g g e r e d . connect ( s e l f . aboutAction )
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 aboutAction ( s e l f ) :
p r i n t ” about ”
i f name == ” m a i n ” :
app = QtGui . QApplication ( s y s . argv )
myapp = myGUI ()
myapp . show ()
s y s . e x i t ( app . exec ( ) )
23 of 30
39. Ejemplos
Drag and Drop
import s y s
from PyQt4 import QtGui
c l a s s DragDrop ( QtGui . QDialog ) :
def i n i t ( s e l f , parent=None ) :
QtGui . QDialog . i n i t ( s e l f , parent )
s e l f . r e s i z e (180 , 60)
e d i t = QtGui . QLineEdit ( ’ ’ , s e l f )
e d i t . setDragEnabled ( True )
e d i t . move (20 , 20)
s c r e e n = QtGui . QDesktopWidget ( ) . screenGeometry ()
s i z e = s e l f . geometry ()
i f name == ” m a i n ” :
app = QtGui . QApplication ( s y s . argv )
icon = DragDrop ()
icon . show ()
s y s . e x i t ( app . exec ( ) )
24 of 30
40. Ejemplos
Multimedia - Audio
import s y s
from PyQt4 import QtGui
from PyQt4 . phonon import Phonon
app = QtGui . QApplication ( s y s . argv )
u r l=” A i r b e a t P r o j e c t−AirbeatOne . mp3”
w = QtGui . QWidget ()
audio = 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 ()
audio . play ()
s y s . e x i t ( app . exec ( ) )
25 of 30
41. Ejemplos
Multimedia - Video
import s y s
from PyQt4 import QtGui
from PyQt4 . phonon import Phonon
app = QtGui . QApplication ( s y s . argv )
u r l=” qt . f l v ”
w = QtGui . QWidget ()
p l a y e r = Phonon . VideoPlayer ( Phonon . VideoCategory ,w)
p l a y e r . load ( Phonon . MediaSource ( u r l ))
w. setMinimumSize (400 ,400)
topLayout = QtGui . QVBoxLayout (w)
topLayout . addWidget ( p l a y e r )
w. setLayout ( topLayout )
w. show ()
p l a y e r . play ()
s y s . e x i t ( app . exec ( ) )
26 of 30
44. Conclusiones
C++ es un muy buen lenguaje, pero Python es m´as 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 documentaci´on.
F´acil de aprender.
29 of 30