SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
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
Introducci´on
Desarrollo de Software
2 of 30
Introducci´on
Desarrollo de Software
Dise˜no.
2 of 30
Introducci´on
Desarrollo de Software
Dise˜no.
Implementaci´on.
2 of 30
Introducci´on
Desarrollo de Software
Dise˜no.
Implementaci´on.
A veces puede ser una pesadilla!
2 of 30
Introducci´on
Desarrollo de Software
Dise˜no.
Implementaci´on.
A veces puede ser una pesadilla!
...entonces Qt viene en nuestro rescate.
2 of 30
Introducci´on
Desarrollo de Software
Dise˜no.
Implementaci´on.
A veces puede ser una pesadilla!
...entonces Qt viene en nuestro rescate.
y todo es mejor a´un con Python.
2 of 30
Introducci´on
¿Qu´e es Python?
Lenguaje de programaci´on de alto nivel.
3 of 30
Introducci´on
¿Qu´e es Python?
Lenguaje de programaci´on de alto nivel.
Guido van Rossum (fines de los ochenta).
3 of 30
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
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
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
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
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
Introducci´on
¿Qu´e es Qt?
Biblioteca multiplataforma.
4 of 30
Introducci´on
¿Qu´e es Qt?
Biblioteca multiplataforma.
Es un framework desarrollado en C++.
4 of 30
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
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
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
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
Introducci´on
¿Donde est´a Qt?
VIDEO!
6 of 30
Introducci´on
Herramientas de Ayuda
Qt-Creator
7 of 30
Introducci´on
Herramientas de Ayuda
Designer
8 of 30
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
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
Conceptos
OO
Es importante que recordemos la Orientaci´on 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´etodos.
En los cuales podemos encontrar:
QtCore
QtGui
QtSvg
QtSQL
...
12 of 30
Conceptos
Comportamiento
Tenemos Objetos (elementos)
Tenemos Se˜nales (por cada elemento)
13 of 30
Conceptos
Comportamiento
14 of 30
Conceptos
Comportamiento
Cada objeto tiene una o m´as se˜nales:
connect()
valueChanged()
textChanged()
accepted()
triggered()
...
15 of 30
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
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
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
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
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
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
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
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
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
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
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
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´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
¿Preguntas?
30 of 30

Contenu connexe

Similaire à Introducción a PyQt

Artesanos de software: El uso e implementación de patrones de diseño en siste...
Artesanos de software: El uso e implementación de patrones de diseño en siste...Artesanos de software: El uso e implementación de patrones de diseño en siste...
Artesanos de software: El uso e implementación de patrones de diseño en siste...Software Guru
 
02_C_Functions_Arrays.pdf
02_C_Functions_Arrays.pdf02_C_Functions_Arrays.pdf
02_C_Functions_Arrays.pdfalexey63
 
Una solución para agregar estructura de repetición
Una solución para agregar estructura de repetición Una solución para agregar estructura de repetición
Una solución para agregar estructura de repetición UVM
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++Riki Tapia
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datosRiki Tapia
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfMarxx4
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)Videoconferencias UTPL
 
Semana 7 while for (2).pptx introduccion a la computacion
Semana 7  while for (2).pptx introduccion a la computacionSemana 7  while for (2).pptx introduccion a la computacion
Semana 7 while for (2).pptx introduccion a la computacionaidaramireztamayo3
 
Manual netlogo basico insisoc
Manual netlogo basico insisocManual netlogo basico insisoc
Manual netlogo basico insisocGaby Martz
 
Mpinning Gyalg12(Analg)
Mpinning Gyalg12(Analg)Mpinning Gyalg12(Analg)
Mpinning Gyalg12(Analg)Spimy
 
2011 clase17
2011 clase172011 clase17
2011 clase17PatriciaU
 
2011 clase17
2011 clase172011 clase17
2011 clase17PatriciaU
 
Funcione con vectores y matrices en c
Funcione con vectores y matrices en cFuncione con vectores y matrices en c
Funcione con vectores y matrices en cpaulinaguec
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matricespaulinaguec
 
Manual de prácticas java 2015
Manual de prácticas java 2015Manual de prácticas java 2015
Manual de prácticas java 2015Ulises_312
 
Arreglos
ArreglosArreglos
Arregloslichic
 

Similaire à Introducción a PyQt (20)

Artesanos de software: El uso e implementación de patrones de diseño en siste...
Artesanos de software: El uso e implementación de patrones de diseño en siste...Artesanos de software: El uso e implementación de patrones de diseño en siste...
Artesanos de software: El uso e implementación de patrones de diseño en siste...
 
02_C_Functions_Arrays.pdf
02_C_Functions_Arrays.pdf02_C_Functions_Arrays.pdf
02_C_Functions_Arrays.pdf
 
Una solución para agregar estructura de repetición
Una solución para agregar estructura de repetición Una solución para agregar estructura de repetición
Una solución para agregar estructura de repetición
 
ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++ESTRUCTURAS ARRAYS Y DATOS C++
ESTRUCTURAS ARRAYS Y DATOS C++
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdfSesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
Sesion1_Ciencia_de_Datos-Introduccion a Pithon.pdf
 
Go python, go
Go python, goGo python, go
Go python, go
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
colasEjeRe_1_2022.pdf
colasEjeRe_1_2022.pdfcolasEjeRe_1_2022.pdf
colasEjeRe_1_2022.pdf
 
Informe tecnico de la unidad 1
Informe tecnico de la unidad 1Informe tecnico de la unidad 1
Informe tecnico de la unidad 1
 
Semana 7 while for (2).pptx introduccion a la computacion
Semana 7  while for (2).pptx introduccion a la computacionSemana 7  while for (2).pptx introduccion a la computacion
Semana 7 while for (2).pptx introduccion a la computacion
 
Manual netlogo basico insisoc
Manual netlogo basico insisocManual netlogo basico insisoc
Manual netlogo basico insisoc
 
Mpinning Gyalg12(Analg)
Mpinning Gyalg12(Analg)Mpinning Gyalg12(Analg)
Mpinning Gyalg12(Analg)
 
2011 clase17
2011 clase172011 clase17
2011 clase17
 
2011 clase17
2011 clase172011 clase17
2011 clase17
 
Funcione con vectores y matrices en c
Funcione con vectores y matrices en cFuncione con vectores y matrices en c
Funcione con vectores y matrices en c
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matrices
 
Manual de prácticas java 2015
Manual de prácticas java 2015Manual de prácticas java 2015
Manual de prácticas java 2015
 
Arreglos
ArreglosArreglos
Arreglos
 
Arreglos en C
Arreglos en CArreglos en C
Arreglos en C
 

Introducción a PyQt

  • 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
  • 6. Introducci´on Desarrollo de Software Dise˜no. Implementaci´on. A veces puede ser una pesadilla! ...entonces Qt viene en nuestro rescate. 2 of 30
  • 7. Introducci´on Desarrollo de Software Dise˜no. Implementaci´on. A veces puede ser una pesadilla! ...entonces Qt viene en nuestro rescate. y todo es mejor a´un con Python. 2 of 30
  • 8. Introducci´on ¿Qu´e es Python? Lenguaje de programaci´on de alto nivel. 3 of 30
  • 9. Introducci´on ¿Qu´e es Python? Lenguaje de programaci´on de alto nivel. Guido van Rossum (fines de los ochenta). 3 of 30
  • 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
  • 15. Introducci´on ¿Qu´e es Qt? Biblioteca multiplataforma. 4 of 30
  • 16. Introducci´on ¿Qu´e es Qt? Biblioteca multiplataforma. Es un framework desarrollado en C++. 4 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
  • 28. Conceptos Comportamiento Tenemos Objetos (elementos) Tenemos Se˜nales (por cada elemento) 13 of 30
  • 30. Conceptos Comportamiento Cada objeto tiene una o m´as se˜nales: connect() valueChanged() textChanged() accepted() triggered() ... 15 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