SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
PySide + QtQuick
 Daker Fernandes / Marcel Caraciolo
                         Python Aula 09

            1
O que é PySide?


   PySide = Python + Qt Framework




                           Python Aula 09

                   2
Qt
•  Biblioteca C++
•  Cross-Platform
•  Licença dual (LGPL ou Comercial)
•  Extensa:




                                       Python Aula 09

                           3
Qt




           Python Aula 09

      4
Qt




           Python Aula 09

      5
Qt




           Python Aula 09

      6
Qt – Quem usa?




                  Python Aula 09

            7
>>>PySide == PyQT
. . . False

   PySide – LGPL
   PyQT – GPL
                     Python Aula 09

             8
Como Instalar - Qt




   http://qt.nokia.com/downloads

                            Python Aula 09

                 9
Documentação - Qt




 http://doc.qt.nokia.com/4.7/index.html
                               Python Aula 09

                    10
Como Instalar - PySide




  http://developer.qt.nokia.com/wiki/
            PySideDownloads/
                             Python Aula 09

                  11
Documentação - PySide




  http://developer.qt.nokia.com/wiki/
          PySideDocumentation/
                             Python Aula 09

                  12
Hello Qt
import sys
from PySide import QtGui # GUI module

app = QtGui.QApplication(sys.argv)

hello = QtGui.QPushButton(Hello world!)

hello.resize(100, 30)

hello.show()

sys.exit(app.exec_())




                                         Python Aula 09

                          13
Hello Qt
import sys
from PySide import QtGui

def hello():
   
print “Hello!”

app = QtGui.QApplication(sys.argv)

helloButton = QtGui.QPushButton(“Hello!)

helloButton.clicked.connect(hello)

helloButton.show()

sys.exit(app.exec_())


                                       Python Aula 09

                            14
Signals e Slots

readButton.clicked.connect(increment)

# helloButton = QObject
# clicked = Signal
# increment = Slot




                                    Python Aula 09

                       15
Signals e Slots
from PySide.QtCore import Qobject, Slot, Signal

class Counter(QObject):
   
def __init__(self, count=0):
   
    
QObject.__init__(self) # super
   
    
self.count = count

   
# criando sinal
   
countChanged = Signal(int)

   
@Slot()
   
def increment(self):
   
   
self.count += 1
   
   
self.countChanged.emit(self.count)
                                       Python Aula 09

                          16
Signals e Slots
@Slot(int)
def console_print(number):
   
print ‘counter value is %d’ % number

counter = Counter()
counter.counterChanged.connect(console_print)

counter.increment()
counter.increment()
counter.increment()




                                      Python Aula 09

                          17
Signals e Slots
class Counter(QObject):
    
def __init__(self, parent=None):
    
    
QObject.__init__(self, parent)
    
    
self._count = 0

   
def getCount(self):
   
    
return self._count

   
def   setCount(self, count):
   
      
if count != self._count:
   
      
    
self._count = count
   
      
    
self.countChanged.emit(count)
   
…

   
countChanged = Signal(int)

    
count = Property(int, getCount, setCount,
notify=countChanged)
                                                 Python Aula 09

                               18
QWidget
class WidgetContador(QWidget):
       def __init__(self, counter = Counter()):
            self._counter = counter
            self.label = QLabel(“”)
   
   self.button = QPushButton(“Incremento”)
   
   self.button.clicked.connect(lambda:
   
    

   
    
self._counter.increment())
   
 self._counter.countChanged.connect(lambda:


self.label.setText(str(self._counter.count)))

   
   layout = QVBoxLayout()
   
   layout.addWidget(self.label)
    Python Aula 09
   
   layout.addWidget(self.button)
                          19
   
   self.setLayout(layout)
QWidget
           Exercicio:




                         Python Aula 09

                20
Fluid Interfaces
•  http://www.youtube.com/watch?v=tSBQ63bL0_Y
•  http://www.youtube.com/watch?
   v=P37PaOZJzEsfeature=related
•  http://www.youtube.com/watch?v=2x_bS4M3jhY
•  http://www.youtube.com/watch?v=GYlyDKqzNC0
•  http://www.youtube.com/watch?v=6J3QV115cSU
•  http://www.youtube.com/watch?v=RTJKzJWOsbUNR=1
•  http://www.youtube.com/watch?v=U7IgwNrcln8
•  http://www.youtube.com/watch?
   v=P37PaOZJzEsfeature=related
•  http://www.youtube.com/watch?v=n3W5O2biSPU
•  http://www.youtube.com/watch?v=Wq-XJMJEAnE
•  http://www.youtube.com/watch?v=9NjLVTIi_ZY
•  http://www.youtube.com/watch?v=g_cf-7uoK5o
 Aula 09
                                            Python

                              21
QtQuick
•  Módulo QDeclarative
•  QML
   •  Linguagem Javascript based
   •  Árvore de Elementos (Semelhante ao HTML)
   •  Integração com Qt


•  Aprenda:
http://doc.qt.nokia.com/latest/qtquick.html
•  Referências:
http://doc.qt.nokia.com/latest/qml-groups.html
http://doc.qt.nokia.com/latest/qdeclarativeelements.html
http://doc.qt.nokia.com/latest/qtdeclarative.html
                                                  Python Aula 09

                                 22
QML – Hello World
import QtQuick 1.0

Text {
   
width: 200
   
height: 60
   
text: Hello World!
   
font.pixelSize: 32
}



                            Python Aula 09

                      23
QML - DeclarativeView
import sys
from PySide.QtCore import QUrl
from PySide.QtGui import QApplication, QSizePolicy
from PySide.QtDeclarative import QDeclarativeView

app = QApplication(sys.argv)

view = QDeclarativeView()
view.setSource(QUrl(‘minhaUI.qml'))   # carrega
arquivo QML
view.show()

sys.exit(app.exec_())
                                        Python Aula 09

                          24
QML - Recursos
import QtQuick 1.0

Item {
   
width: 1000
   
height: 500
   
Image {
   
    
x: 0; y: 0
   
    
width: 500; height: 500
   
    
source: monera.png // No mesmo diretório
que o .qml
   
}
   
Image {
   
    
x: 500; y: 0
   
    
width: 500; height: 500
   
    
// Imagem na web
   
    
source: http://imgs.xkcd.com/comics/na.png 
   
    
fillMode: Image.PreserveAspectFit
 09
                                        Python Aula

   
}
                     25

}
QML - Âncoras
import QtQuick 1.0

Item {
   
Image {
   
    
id: image1 // identificado do objeto
   
    
anchors { left: parent.left; top: parent.top
   
    
   
bottom: parent.bottom }
   
    
source: monera.png“
   
}
   
Image {
   
    
anchors { top: parent.top; bottom:
parent.bottom
   
    
   
right: parent.right; left: image1.right }
   
    
source: http://imgs.xkcd.com/comics/na.png 
   
    
fillMode: Image.PreserveAspectFit
   
}
}
                                      Python Aula 09

                          26
QML – Property Binding
Rectangle {
   
width: 200
   
height: 200
   
color: 'tomato' // Nome da cor
   
Text {
   
    
anchors.centerIn: parent
   
    
rotation: x // Property Binding
   
    
opacity: y / 300 // Expression Binding
   
    
text: 'Rotated'
   
    
color: '#990099' // Código hexadecimal
   
    
font {
   
    
   
family: Helvetica
   
    
   
pixelSize: 90
   
    
}
   
    
smooth: true
   
}
}
                                     Python Aula 09

                              27
QML - Eventos
import QtQuick 1.0

Image {
    
width: sourceSize.width / 2
    
height: sourceSize.height / 2

     
source: ocean.jpg

     
Image {
     
    
id: monera
     
    
source: monera.png
     
    
width: 150
     
    
height: 150   

     
    
    

     
    
MouseArea {
     
    
    
    
anchors.fill: parent
     
    
    
    
onClicked: { monera.x = 300; monera.y = 300 }
     
    
}
     
}
                                               Python Aula 09
}
                                28
QML – Comportamento
import QtQuick 1.0

Image {
     
width: sourceSize.width / 2
     
height: sourceSize.height / 2

    
source: ocean.jpg

     
Image {
     
     
id: monera
     
     
source: monera.png
     
     
width: 150
     
     
height: 150

     
     

     
     
Behavior on x { NumberAnimation { duration: 2000 ; easing.type:
Easing.OutElastic }}
     
     
Behavior on y { NumberAnimation { duration: 2000 ; easing.type:
Easing.OutElastic }}
     
     
     

     
     
MouseArea {
     
     
     
anchors.fill: parent
     
     
     
hoverEnabled: true
     
     
     
onEntered: { monera.x = Math.random() Python Aula 09
; 
                                                         * 500
     
     
     
     
monera.y = Math.random() * 500 }
     
     
}
                        29
     
}
QML – Componentes QML
Monera.qml
                              Ocean.qml
import QtQuick 1.0
                              import QtQuick 1.0
Image {
                              Image {
     
id: monera
                                   width:
     
source: monera.png“
                              sourceSize.width / 2
                                   height:
     
property int size: 150
                              sourceSize.height / 2
     
width: size
                                      source: ocean.jpg
     
height: size     

                                      Repeater {
     
...
                                           model: 10
                                           Monera {
     
MouseArea {
                                      
   size: 180
     
     
anchors.fill:
                        parent
                                      
 x: Math.random() * 500
     
     
hoverEnabled: true
                                      
   y: Math.random() *
     
     
onEntered: { ... }
                               500
     
}
                                              }
}
                                       }
                              }

                                                             Python Aula 09

                                            30
QML – Python Values
monera.py
context = view.rootContext()
context.setContextProperty(‘moneraCount’,
20)
context.setContextProperty(‘moneraSize’,
120)

Ocean.qml
Repeater {
   
model: moneraCount
   
Monera { size: moneraSize ; ... }
}
                              Python Aula 09

                     31
QML - Model
// Model
ListModel {
   
id: todoList
   
ListElement {
   
 
task: ‘Aula de Python’
   
}
   
ListElement {
   
 
task: ‘Aula de QML’
   
}
   
ListElement {
   
 
task: ‘Happy Hour’
   
}
}
                              Python Aula 09

                    32
QML - ListView
import QtQuick 1.0

ListView {
    
id: notes
    
width: 600; height: 800
    
model: todoList
    
delegate: Component {
    
    
Text {
    
    
    
height: 60; width: 600
    
    
    
text: task
    
    
    
font.pixelSize: 32
    
    
    
MouseArea {
    
    
    
    
anchors.fill: parent
    
    
    
    
onClicked: console.log(modelData.task)
    
    
    
}   
    
    

    
    
}
    
}
}
                                             Python Aula 09

                               33
QML – Modelo Python
todo.py
view = QDeclarativeView()
context = view.rootContext()
pymodel = [{'task':'Aula Python'},
    
{'task':'Aula QML'},
    
{'task':'Happy Hour'}]
context.setContextProperty('pymodel', pymodel)           


TodoList.qml
import QtQuick 1.0

ListView {
    
id: notes
    
width: 600; height: 800
    
model: pymodel
    
delegate: Component {
    
    
TodoElement { text: modelData.task; ... }
    
}
                                              Python Aula 09
}
                                    34
Mais sobre model View:
•  ModelView:
•  http://doc.qt.nokia.com/latest/qdeclarativemodels.html
•  http://developer.qt.nokia.com/wiki/
   Selectable_list_of_Python_objects_in_QML

•  http://developer.qt.nokia.com/wiki/
   Updating_QML_content_from_Python_threads

•  http://blog.rburchell.com/2010/02/pyside-tutorial-model-
   view-programming_22.html



                                                 Python Aula 09

                                  35
PySide + QtQuick
   Daker Fernandes / Marcel Caraciolo
                     Python Aula 09

        36

Mais conteúdo relacionado

Mais procurados

openFrameworks 007 - graphics
openFrameworks 007 - graphicsopenFrameworks 007 - graphics
openFrameworks 007 - graphics
roxlu
 

Mais procurados (20)

SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
 
响应式编程及框架
响应式编程及框架响应式编程及框架
响应式编程及框架
 
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
 
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
 
Pyimproved again
Pyimproved againPyimproved again
Pyimproved again
 
Endless fun with Arduino and Eventmachine
Endless fun with Arduino and EventmachineEndless fun with Arduino and Eventmachine
Endless fun with Arduino and Eventmachine
 
Scale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOneScale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOne
 
openFrameworks 007 - video
openFrameworks 007 - videoopenFrameworks 007 - video
openFrameworks 007 - video
 
Introduction to kotlin coroutines
Introduction to kotlin coroutinesIntroduction to kotlin coroutines
Introduction to kotlin coroutines
 
Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017
 
Google Go For Ruby Hackers
Google Go For Ruby HackersGoogle Go For Ruby Hackers
Google Go For Ruby Hackers
 
Current State of Coroutines
Current State of CoroutinesCurrent State of Coroutines
Current State of Coroutines
 
openFrameworks 007 - graphics
openFrameworks 007 - graphicsopenFrameworks 007 - graphics
openFrameworks 007 - graphics
 
Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티
Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티
Go 프로그래밍 소개 - 장재휴, DomainDriven커뮤니티
 
Snickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media EncodingSnickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media Encoding
 
openFrameworks 007 - 3D
openFrameworks 007 - 3DopenFrameworks 007 - 3D
openFrameworks 007 - 3D
 
Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017
 
От Java Threads к лямбдам, Андрей Родионов
От Java Threads к лямбдам, Андрей РодионовОт Java Threads к лямбдам, Андрей Родионов
От Java Threads к лямбдам, Андрей Родионов
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Metaprogramming and Reflection in Common Lisp
Metaprogramming and Reflection in Common LispMetaprogramming and Reflection in Common Lisp
Metaprogramming and Reflection in Common Lisp
 

Semelhante a CITi - PySide

服务框架: Thrift & PasteScript
服务框架: Thrift & PasteScript服务框架: Thrift & PasteScript
服务框架: Thrift & PasteScript
Qiangning Hong
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010
Chris Ramsdale
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
Ariya Hidayat
 

Semelhante a CITi - PySide (20)

Toonz code leaves much to be desired
Toonz code leaves much to be desiredToonz code leaves much to be desired
Toonz code leaves much to be desired
 
服务框架: Thrift & PasteScript
服务框架: Thrift & PasteScript服务框架: Thrift & PasteScript
服务框架: Thrift & PasteScript
 
Cluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in CCluj.py Meetup: Extending Python in C
Cluj.py Meetup: Extending Python in C
 
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010
 
Scripting Your Qt Application
Scripting Your Qt ApplicationScripting Your Qt Application
Scripting Your Qt Application
 
PVS-Studio for Linux Went on a Tour Around Disney
PVS-Studio for Linux Went on a Tour Around DisneyPVS-Studio for Linux Went on a Tour Around Disney
PVS-Studio for Linux Went on a Tour Around Disney
 
Witekio custom modern qt quick components
Witekio custom modern qt quick componentsWitekio custom modern qt quick components
Witekio custom modern qt quick components
 
The Ring programming language version 1.7 book - Part 88 of 196
The Ring programming language version 1.7 book - Part 88 of 196The Ring programming language version 1.7 book - Part 88 of 196
The Ring programming language version 1.7 book - Part 88 of 196
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
Best Practices in Qt Quick/QML - Part 1 of 4
Best Practices in Qt Quick/QML - Part 1 of 4Best Practices in Qt Quick/QML - Part 1 of 4
Best Practices in Qt Quick/QML - Part 1 of 4
 
Fun with QML
Fun with QMLFun with QML
Fun with QML
 
The Ring programming language version 1.5.3 book - Part 92 of 184
The Ring programming language version 1.5.3 book - Part 92 of 184The Ring programming language version 1.5.3 book - Part 92 of 184
The Ring programming language version 1.5.3 book - Part 92 of 184
 
Integrazione QML / C++
Integrazione QML / C++Integrazione QML / C++
Integrazione QML / C++
 
Porting Motif Applications to Qt - Webinar
Porting Motif Applications to Qt - WebinarPorting Motif Applications to Qt - Webinar
Porting Motif Applications to Qt - Webinar
 
Porting Motif Applications to Qt - Webinar
Porting Motif Applications to Qt - WebinarPorting Motif Applications to Qt - Webinar
Porting Motif Applications to Qt - Webinar
 
Appium Automation with Kotlin
Appium Automation with KotlinAppium Automation with Kotlin
Appium Automation with Kotlin
 
Aplicações Assíncronas no Android com Coroutines e Jetpack
Aplicações Assíncronas no Android com Coroutines e JetpackAplicações Assíncronas no Android com Coroutines e Jetpack
Aplicações Assíncronas no Android com Coroutines e Jetpack
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
 
Working in the multi-cloud with libcloud
Working in the multi-cloud with libcloudWorking in the multi-cloud with libcloud
Working in the multi-cloud with libcloud
 

Mais de Daker Fernandes (9)

Functional Pattern Matching on Python
Functional Pattern Matching on PythonFunctional Pattern Matching on Python
Functional Pattern Matching on Python
 
Why is Python slow? Python Nordeste 2013
Why is Python slow? Python Nordeste 2013Why is Python slow? Python Nordeste 2013
Why is Python slow? Python Nordeste 2013
 
Raspberry Pi + Python
Raspberry Pi + PythonRaspberry Pi + Python
Raspberry Pi + Python
 
Opengl aula-01
Opengl aula-01Opengl aula-01
Opengl aula-01
 
Plasmaquick Workshop - FISL 13
Plasmaquick Workshop - FISL 13Plasmaquick Workshop - FISL 13
Plasmaquick Workshop - FISL 13
 
Jogos em Qt
Jogos em QtJogos em Qt
Jogos em Qt
 
Dominando Modelos Ocultos de Markov com Python e GHMM
Dominando Modelos Ocultos de Markov com Python e GHMMDominando Modelos Ocultos de Markov com Python e GHMM
Dominando Modelos Ocultos de Markov com Python e GHMM
 
QtQuick - WSL II
QtQuick - WSL IIQtQuick - WSL II
QtQuick - WSL II
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Último (20)

What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 

CITi - PySide

  • 1. PySide + QtQuick Daker Fernandes / Marcel Caraciolo Python Aula 09 1
  • 2. O que é PySide? PySide = Python + Qt Framework Python Aula 09 2
  • 3. Qt •  Biblioteca C++ •  Cross-Platform •  Licença dual (LGPL ou Comercial) •  Extensa: Python Aula 09 3
  • 4. Qt Python Aula 09 4
  • 5. Qt Python Aula 09 5
  • 6. Qt Python Aula 09 6
  • 7. Qt – Quem usa? Python Aula 09 7
  • 8. >>>PySide == PyQT . . . False PySide – LGPL PyQT – GPL Python Aula 09 8
  • 9. Como Instalar - Qt http://qt.nokia.com/downloads Python Aula 09 9
  • 10. Documentação - Qt http://doc.qt.nokia.com/4.7/index.html Python Aula 09 10
  • 11. Como Instalar - PySide http://developer.qt.nokia.com/wiki/ PySideDownloads/ Python Aula 09 11
  • 12. Documentação - PySide http://developer.qt.nokia.com/wiki/ PySideDocumentation/ Python Aula 09 12
  • 13. Hello Qt import sys from PySide import QtGui # GUI module app = QtGui.QApplication(sys.argv)
 hello = QtGui.QPushButton(Hello world!)
 hello.resize(100, 30)
 hello.show()
 sys.exit(app.exec_()) Python Aula 09 13
  • 14. Hello Qt import sys from PySide import QtGui def hello(): print “Hello!” app = QtGui.QApplication(sys.argv)
 helloButton = QtGui.QPushButton(“Hello!)
 helloButton.clicked.connect(hello)
 helloButton.show()
 sys.exit(app.exec_()) Python Aula 09 14
  • 15. Signals e Slots readButton.clicked.connect(increment) # helloButton = QObject # clicked = Signal # increment = Slot Python Aula 09 15
  • 16. Signals e Slots from PySide.QtCore import Qobject, Slot, Signal class Counter(QObject): def __init__(self, count=0): QObject.__init__(self) # super self.count = count # criando sinal countChanged = Signal(int) @Slot() def increment(self): self.count += 1 self.countChanged.emit(self.count) Python Aula 09 16
  • 17. Signals e Slots @Slot(int) def console_print(number): print ‘counter value is %d’ % number counter = Counter() counter.counterChanged.connect(console_print) counter.increment() counter.increment() counter.increment() Python Aula 09 17
  • 18. Signals e Slots class Counter(QObject): def __init__(self, parent=None): QObject.__init__(self, parent) self._count = 0 def getCount(self): return self._count def setCount(self, count): if count != self._count: self._count = count self.countChanged.emit(count) … countChanged = Signal(int) count = Property(int, getCount, setCount, notify=countChanged) Python Aula 09 18
  • 19. QWidget class WidgetContador(QWidget): def __init__(self, counter = Counter()): self._counter = counter self.label = QLabel(“”) self.button = QPushButton(“Incremento”) self.button.clicked.connect(lambda: self._counter.increment()) self._counter.countChanged.connect(lambda: self.label.setText(str(self._counter.count))) layout = QVBoxLayout() layout.addWidget(self.label) Python Aula 09 layout.addWidget(self.button) 19 self.setLayout(layout)
  • 20. QWidget Exercicio: Python Aula 09 20
  • 21. Fluid Interfaces •  http://www.youtube.com/watch?v=tSBQ63bL0_Y •  http://www.youtube.com/watch? v=P37PaOZJzEsfeature=related •  http://www.youtube.com/watch?v=2x_bS4M3jhY •  http://www.youtube.com/watch?v=GYlyDKqzNC0 •  http://www.youtube.com/watch?v=6J3QV115cSU •  http://www.youtube.com/watch?v=RTJKzJWOsbUNR=1 •  http://www.youtube.com/watch?v=U7IgwNrcln8 •  http://www.youtube.com/watch? v=P37PaOZJzEsfeature=related •  http://www.youtube.com/watch?v=n3W5O2biSPU •  http://www.youtube.com/watch?v=Wq-XJMJEAnE •  http://www.youtube.com/watch?v=9NjLVTIi_ZY •  http://www.youtube.com/watch?v=g_cf-7uoK5o Aula 09 Python 21
  • 22. QtQuick •  Módulo QDeclarative •  QML •  Linguagem Javascript based •  Árvore de Elementos (Semelhante ao HTML) •  Integração com Qt •  Aprenda: http://doc.qt.nokia.com/latest/qtquick.html •  Referências: http://doc.qt.nokia.com/latest/qml-groups.html http://doc.qt.nokia.com/latest/qdeclarativeelements.html http://doc.qt.nokia.com/latest/qtdeclarative.html Python Aula 09 22
  • 23. QML – Hello World import QtQuick 1.0 Text { width: 200 height: 60 text: Hello World! font.pixelSize: 32 } Python Aula 09 23
  • 24. QML - DeclarativeView import sys from PySide.QtCore import QUrl from PySide.QtGui import QApplication, QSizePolicy from PySide.QtDeclarative import QDeclarativeView app = QApplication(sys.argv) view = QDeclarativeView() view.setSource(QUrl(‘minhaUI.qml')) # carrega arquivo QML view.show() sys.exit(app.exec_()) Python Aula 09 24
  • 25. QML - Recursos import QtQuick 1.0 Item { width: 1000 height: 500 Image { x: 0; y: 0 width: 500; height: 500 source: monera.png // No mesmo diretório que o .qml } Image { x: 500; y: 0 width: 500; height: 500 // Imagem na web source: http://imgs.xkcd.com/comics/na.png fillMode: Image.PreserveAspectFit 09 Python Aula } 25 }
  • 26. QML - Âncoras import QtQuick 1.0 Item { Image { id: image1 // identificado do objeto anchors { left: parent.left; top: parent.top bottom: parent.bottom } source: monera.png“ } Image { anchors { top: parent.top; bottom: parent.bottom right: parent.right; left: image1.right } source: http://imgs.xkcd.com/comics/na.png fillMode: Image.PreserveAspectFit } } Python Aula 09 26
  • 27. QML – Property Binding Rectangle { width: 200 height: 200 color: 'tomato' // Nome da cor Text { anchors.centerIn: parent rotation: x // Property Binding opacity: y / 300 // Expression Binding text: 'Rotated' color: '#990099' // Código hexadecimal font { family: Helvetica pixelSize: 90 } smooth: true } } Python Aula 09 27
  • 28. QML - Eventos import QtQuick 1.0 Image { width: sourceSize.width / 2 height: sourceSize.height / 2 source: ocean.jpg Image { id: monera source: monera.png width: 150 height: 150 MouseArea { anchors.fill: parent onClicked: { monera.x = 300; monera.y = 300 } } } Python Aula 09 } 28
  • 29. QML – Comportamento import QtQuick 1.0 Image { width: sourceSize.width / 2 height: sourceSize.height / 2 source: ocean.jpg Image { id: monera source: monera.png width: 150 height: 150 Behavior on x { NumberAnimation { duration: 2000 ; easing.type: Easing.OutElastic }} Behavior on y { NumberAnimation { duration: 2000 ; easing.type: Easing.OutElastic }} MouseArea { anchors.fill: parent hoverEnabled: true onEntered: { monera.x = Math.random() Python Aula 09 ; * 500 monera.y = Math.random() * 500 } } 29 }
  • 30. QML – Componentes QML Monera.qml Ocean.qml import QtQuick 1.0 import QtQuick 1.0 Image { Image { id: monera width: source: monera.png“ sourceSize.width / 2 height: property int size: 150 sourceSize.height / 2 width: size source: ocean.jpg height: size Repeater { ... model: 10 Monera { MouseArea { size: 180 anchors.fill: parent x: Math.random() * 500 hoverEnabled: true y: Math.random() * onEntered: { ... } 500 } } } } } Python Aula 09 30
  • 31. QML – Python Values monera.py context = view.rootContext() context.setContextProperty(‘moneraCount’, 20) context.setContextProperty(‘moneraSize’, 120) Ocean.qml Repeater { model: moneraCount Monera { size: moneraSize ; ... } } Python Aula 09 31
  • 32. QML - Model // Model ListModel { id: todoList ListElement { task: ‘Aula de Python’ } ListElement { task: ‘Aula de QML’ } ListElement { task: ‘Happy Hour’ } } Python Aula 09 32
  • 33. QML - ListView import QtQuick 1.0 ListView { id: notes width: 600; height: 800 model: todoList delegate: Component { Text { height: 60; width: 600 text: task font.pixelSize: 32 MouseArea { anchors.fill: parent onClicked: console.log(modelData.task) } } } } Python Aula 09 33
  • 34. QML – Modelo Python todo.py view = QDeclarativeView() context = view.rootContext() pymodel = [{'task':'Aula Python'}, {'task':'Aula QML'}, {'task':'Happy Hour'}] context.setContextProperty('pymodel', pymodel) TodoList.qml import QtQuick 1.0 ListView { id: notes width: 600; height: 800 model: pymodel delegate: Component { TodoElement { text: modelData.task; ... } } Python Aula 09 } 34
  • 35. Mais sobre model View: •  ModelView: •  http://doc.qt.nokia.com/latest/qdeclarativemodels.html •  http://developer.qt.nokia.com/wiki/ Selectable_list_of_Python_objects_in_QML •  http://developer.qt.nokia.com/wiki/ Updating_QML_content_from_Python_threads •  http://blog.rburchell.com/2010/02/pyside-tutorial-model- view-programming_22.html Python Aula 09 35
  • 36. PySide + QtQuick Daker Fernandes / Marcel Caraciolo Python Aula 09 36