Está en la página 1de 45

Introducción a PyQt

“¿Quién dijo que crear e implementar interfaces es dificil?”

Cristián D. Maureira Fredes


saint@archlinux.cl

Comunidad KDE Chile y


Arch Linux Chile

1 de noviembre de 2010
Introducción

 Desarrollo de Software

2 of 30
Introducción

 Desarrollo de Software
 Diseño.

2 of 30
Introducción

 Desarrollo de Software
 Diseño.
 Implementación.

2 of 30
Introducción

 Desarrollo de Software
 Diseño.
 Implementación.
 A veces puede ser una pesadilla!

2 of 30
Introducción

 Desarrollo de Software
 Diseño.
 Implementación.
 A veces puede ser una pesadilla!
 ...entonces Qt viene en nuestro rescate.

2 of 30
Introducción

 Desarrollo de Software
 Diseño.
 Implementación.
 A veces puede ser una pesadilla!
 ...entonces Qt viene en nuestro rescate.
 y todo es mejor aún con Python.

2 of 30
Introducción
¿Qué es Python?

 Lenguaje de programación de alto nivel.

3 of 30
Introducción
¿Qué es Python?

 Lenguaje de programación de alto nivel.


 Guido van Rossum (fines de los ochenta).

3 of 30
Introducción
¿Qué es Python?

 Lenguaje de programación de alto nivel.


 Guido van Rossum (fines de los ochenta).
 Nace con la idea de poder tener un código legible (simple).

3 of 30
Introducción
¿Qué es Python?

 Lenguaje de programación de alto nivel.


 Guido van Rossum (fines de los ochenta).
 Nace con la idea de poder tener un código legible (simple).
 Multiparadigma (OO,Imperativo,Funcional).

3 of 30
Introducción
¿Qué es Python?

 Lenguaje de programación de alto nivel.


 Guido van Rossum (fines de los ochenta).
 Nace con la idea de poder tener un código legible (simple).
 Multiparadigma (OO,Imperativo,Funcional).
 Scripting (interpretado).

3 of 30
Introducción
¿Qué es Python?

 Lenguaje de programación de alto nivel.


 Guido van Rossum (fines de los ochenta).
 Nace con la idea de poder tener un código legible (simple).
 Multiparadigma (OO,Imperativo,Funcional).
 Scripting (interpretado).
 Tipificado dinámico.

3 of 30
Introducción
¿Qué es Python?

 Lenguaje de programación de alto nivel.


 Guido van Rossum (fines de los ochenta).
 Nace con la idea de poder tener un código legible (simple).
 Multiparadigma (OO,Imperativo,Funcional).
 Scripting (interpretado).
 Tipificado dinámico.
 Multiplataforma, Open Source, ...

3 of 30
Introducción
¿Qué es Qt?

 Biblioteca multiplataforma.

4 of 30
Introducción
¿Qué es Qt?

 Biblioteca multiplataforma.
 Es un framework desarrollado en C++.

4 of 30
Introducción
¿Qué 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
Introducción
¿Qué 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ólo una biblioteca gráfica. (como otras.......

4 of 30
Introducción
¿Qué 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ólo una biblioteca gráfica. (como otras.......
 ..................GTK)

4 of 30
Introducción
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
Introducción
¿Donde está Qt?

VIDEO!

6 of 30
Introducción
Herramientas de Ayuda
 Qt-Creator

7 of 30
Introducción
Herramientas de Ayuda
 Designer

8 of 30
Introducción
Hello World

import s y s
from 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
Introducción
Simple

import s y s
from 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 ( )
widget . r e s i z e (250 , 150)
widget . setWindowTitle ( ’ simple ’ )
w i d g e t . show ( )
s y s . e x i t ( app . e x e c ( ) )

10 of 30
Conceptos
OO

 Es importante que recordemos la Orientación a Objetos.


 Es de vital importancia, para Python y para Qt.

11 of 30
Conceptos
Jerarquı́a

 Su estructura es modular.
 > 300 clases.
 > 6000 métodos.
 En los cuales podemos encontrar:
 QtCore
 QtGui
 QtSvg
 QtSQL
 ...

12 of 30
Conceptos
Comportamiento

 Tenemos Objetos (elementos)


 Tenemos Señales (por cada elemento)

13 of 30
Conceptos
Comportamiento

14 of 30
Conceptos
Comportamiento

 Cada objeto tiene una o más señales:


 connect()
 valueChanged()
 textChanged()
 accepted()
 triggered()
 ...

15 of 30
Ejemplos
Lineas

import s y s
from PyQt4 i m p o r t QtGui
from l i n e a s i m p o r t ∗

c l a s s myGUI ( QtGui . QWidget ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . ui = Ui Lines ()
s e l f . ui . 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 ) :
text = s e l f . ui . l i n e . text ()
s e l f . ui . l a b e l . setText ( text )
s e l f . ui . l i n e . setText ( ’ ’ )
if name == ” m a i n ” :
app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
myapp = myGUI ( )
myapp . show ( )
s y s . e x i t ( app . e x e c ( ) )

16 of 30
Ejemplos
Listas
import s y s
from PyQt4 i m p o r t QtGui
from l i s t a s i m p o r t ∗

c l a s s myGUI ( QtGui . QWidget ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . ui = Ui Listas ()
s e l f . ui . setupUi ( s e l f )
self . lineas = []
s e l f . u i . addButton . c l i c k e d . connect ( s e l f . addButtonPressed )
s e l f . ui . delButton . c l i c k e d . connect ( s e l f . delButtonPressed )
s e l f . ui . closeButton . c l i c k e d . connect ( s e l f . c l o s e )

def addButtonPressed ( s e l f ) :
text = s e l f . ui . l i n e . text ()
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 . ui . 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
for i in s e l f . lineas :
i f i == t e x t :
del s e l f . l i n e a s [ j ]
17 of 30 j = j + 1
s e l f . ui . l i s t . clear ()
Ejemplos
Seleccion
import s y s
from PyQt4 i m p o r t QtCore , QtGui
from s e l e c c i o n i m p o r t ∗

c l a s s myGUI ( QtGui . QWidget ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . ui = Ui seleccion ()
s e l f . ui . 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 ( self ):
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 ’ ,\
’ A r n a l d o ’ ,\
’ J a i m e ’ ,\
’ S e r g i o ’ ,\
’ Yonathan ’ ]
for i in s e l f . nombres :
s e l f . u i . comboBox . a d d I t e m ( i )
s e l f . p e r s o n a s = [ ’ Yonathan Dossow ’ ,\
’ J a i m e P e l d o z a ’ ,\
’ J a i m e Oyarzun ’ ,\
18 of 30 ’ A r n a l d o G a r a t ’ ,\
’ S e r g i o M o r a l e s ’ ,\
Ejemplos
Fuentes

import s y s
from PyQt4 i m p o r t QtGui
from f o n t s i m p o r t ∗

c l a s s myGUI ( QtGui . QWidget ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . ui = Ui fonts ()
s e l f . ui . setupUi ( s e l f )
s e l f . u i . fontComboBox . c u r r e n t F o n t C h a n g e d . c o n n e c t ( s e l f . c h a n g e F o n t )

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

if name == ” m a i n ” :
app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
myapp = myGUI ( )
myapp . show ( )
s y s . e x i t ( app . e x e c ( ) )

19 of 30
Ejemplos
Calendario

import s y s
from PyQt4 i m p o r t QtGui
from c a l e n d a r i m p o r t ∗

c l a s s myGUI ( QtGui . QWidget ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . ui = Ui Calendar ()
s e l f . ui . setupUi ( s e l f )
s e l f . u i . ca l e n d a r W i d ge t . c l i c k e d . connect ( s e l f . changeDate )

def changeDate ( s e l f ) :
s e l f . ui . l i n e E d i t . setText ( s e l f . ui . calendarWidget . selectedDate ( ) . toString ())

if name == ” m a i n ” :
app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
myapp = myGUI ( )
myapp . show ( )
s y s . e x i t ( app . e x e c ( ) )

20 of 30
Ejemplos
Tabs

import s y s
from PyQt4 i m p o r t QtGui
from t a b s i m p o r t ∗

c l a s s myGUI ( QtGui . QWidget ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . ui = Ui tabs ()
s e l f . ui . setupUi ( s e l f )

if name == ” m a i n ” :
app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
myapp = myGUI ( )
myapp . show ( )
s y s . e x i t ( app . e x e c ( ) )

21 of 30
Ejemplos
Formulario
i m p o r t os , s y s
from PyQt4 i m p o r t QtCore , QtGui , Qt
from f o r m u l a r i o i m p o r t ∗

c l a s s myGUI ( QtGui . QWidget ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . ui = Ui form ()
s e l f . ui . setupUi ( s e l f )

self . s e x , s e l f . name = None , None


self . day , s e l f . month , s e l f . y e a r = None , None , None
self . u i . male . c l i c k e d . c o n n e c t ( s e l f . c h a n g e R a d i o M a l e )
self . u i . female . c l i c k e d . connect ( s e l f . changeRadioFemale )
self . u i . name . t e x t C h a n g e d . c o n n e c t ( s e l f . changeName )
self . u i . day . v a l u e C h a n g e d . c o n n e c t ( s e l f . changeDay )
self . u i . month . v a l u e C h a n g e d . c o n n e c t ( s e l f . changeMonth )
self . u i . year . valueChanged . connect ( s e l f . changeYear )
self . u i . buttonBox . accepted . connect ( s e l f . answer )
self . u i . buttonBox . r e j e c t e d . connect ( s e l f . c l o s e )
self . u i . y e a r . setMaximum ( 2 0 1 0 )

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

def changeRadioFemale ( s e l f ) :
22 of 30 s e l f . s e x = ” Mujer ”
Ejemplos
Menu

i m p o r t os , s y s
from PyQt4 i m p o r t QtCore , QtGui , Qt
from menu i m p o r t ∗

c l a s s myGUI ( QtGui . QMainWindow ) :


def init ( s e l f , p a r e n t=None ) :
QtGui . QWidget . init ( self , parent )
s e l f . u i = Ui MainWindow ( )
s e l f . ui . setupUi ( s e l f )
s e l f . ui . actionTest . t r i g g e r e d . connect ( s e l f . testAction )
s e l f . ui . 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 . ui . 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 ) :
print ” test ”
def aboutAction ( s e l f ) :
p r i n t ” about ”
if name == ” m a i n ” :
app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
myapp = myGUI ( )
myapp . show ( )
s y s . e x i t ( app . e x e c ( ) )

23 of 30
Ejemplos
Drag and Drop

import s y s
from PyQt4 i m p o r t QtGui

c l a s s DragDrop ( QtGui . Q D i a l o g ) :
def init ( s e l f , p a r e n t=None ) :
QtGui . Q D i a l o g . init ( self , parent )
s e l f . r e s i z e (180 , 60)
e d i t = QtGui . Q L i n e E d i t ( ’ ’ , s e l f )
e d i t . s e t D r a g E n a b l e d ( True )
e d i t . move ( 2 0 , 2 0 )
s c r e e n = QtGui . QDesktopWidget ( ) . s c r e e n G e o m e t r y ( )
s i z e = s e l f . geometry ( )
if name == ” m a i n ” :
app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
i c o n = DragDrop ( )
i c o n . show ( )
s y s . e x i t ( app . e x e c ( ) )

24 of 30
Ejemplos
Multimedia - Audio

import s y s
from PyQt4 i m p o r t QtGui
from PyQt4 . phonon i m p o r t Phonon

app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
u r l=” A i r b e a t P r o j e c t −A i r b e a t O n e . mp3”
w = QtGui . QWidget ( )
a u d i o = Phonon . c r e a t e P l a y e r ( Phonon . M u s i c C a t e g o r y ,
Phonon . M e d i a S o u r c e ( u r l ) )
w. setMinimumSize (100 ,100)
w . show ( )
audio . play ()
s y s . e x i t ( app . e x e c ( ) )

25 of 30
Ejemplos
Multimedia - Video

import s y s
from PyQt4 i m p o r t QtGui
from PyQt4 . phonon i m p o r t Phonon

app = QtGui . Q A p p l i c a t i o n ( s y s . a r g v )
u r l=” q t . f l v ”
w = QtGui . QWidget ( )
p l a y e r = Phonon . V i d e o P l a y e r ( Phonon . V i d e o C a t e g o r y , w)
p l a y e r . l o a d ( Phonon . M e d i a S o u r c e ( u r l ) )
w. setMinimumSize (400 ,400)
t o p L a y o u t = QtGui . QVBoxLayout (w)
t o p L a y o u t . addWidget ( p l a y e r )
w. setLayout ( topLayout )
w . show ( )
player . play ()
s y s . e x i t ( app . e x e c ( ) )

26 of 30
Ejemplos
openWall

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 más simple.


 Qt nos ofrece una amplia cantidad de Áreas.
 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ón.
 Fácil de aprender.

29 of 30
¿Preguntas?

30 of 30