Your SlideShare is downloading. ×
Introducción a PyQt
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Introducción a PyQt

509
views

Published on


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
509
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
32
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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
  • 2. Introducci´on Desarrollo de Software 2 of 30
  • 3. Introducci´on Desarrollo de Software Dise˜no. 2 of 30
  • 4. Introducci´on Desarrollo de Software Dise˜no. Implementaci´on. 2 of 30
  • 5. Introducci´on Desarrollo de Software Dise˜no. Implementaci´on. A veces puede ser una pesadilla! 2 of 30
  • 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
  • 21. Introducci´on ¿Donde est´a Qt? VIDEO! 6 of 30
  • 22. Introducci´on Herramientas de Ayuda Qt-Creator 7 of 30
  • 23. Introducci´on Herramientas de Ayuda Designer 8 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
  • 29. Conceptos Comportamiento 14 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
  • 42. Ejemplos openWall Veamos el codigo! 27 of 30
  • 43. Ejemplos µBot Interface Veamos el codigo! 28 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
  • 45. ¿Preguntas? 30 of 30