This really gives you a über rapid app development environment. The power of Python combined with the awesomeness of the declarative language QML from the Qt framework.
Take a look and feel free to play with the example below:
from PySide import QtCore
from PySide import QtGui
from PySide import QtDeclarative
class Message(QtDeclarative.QDeclarativeItem):
messageChanged = QtCore.Signal()
def __init__(self, parent = None):
QtDeclarative.QDeclarativeItem.__init__(self, parent)
self._msg = u''
def getMessage(self):
return self._msg
def setMessage(self, value):
if self._msg != value:
print "Setting message property to", value
self._msg = value
self.messageChanged.emit()
else:
print "Message property already set to", value
message = QtCore.Property(unicode, getMessage, setMessage, notify=messageChanged)
def main():
app = QtGui.QApplication([])
QtDeclarative.qmlRegisterType(Message, "utils", 1, 0, "Message")
win = QtDeclarative.QDeclarativeView()
win.setSource("main.qml")
win.setWindowTitle("Hello World")
win.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView)
win.show()
app.exec_()
if __name__ == "__main__":
main()
import Qt 4.7 // or QtQuick 1.0 if applicable
import utils 1.0
Rectangle {
id: main
signal clicked
color: "black"
width: 360; height: 360
Message {
id: msg
message: "Click Me!"
onMessageChanged: label.font.pixelSize = 40
}
Text {
id: label
anchors.centerIn: parent
text: msg.message
color: "white"
font.pixelSize: 25
Behavior on font.pixelSize {
NumberAnimation { duration: 800; easing.type: Easing.OutBounce }
}
MouseArea {
anchors.fill: parent
onClicked: msg.message = "Hello World"
}
}
}
For more information point your browser to http://www.pyside.org and download the package for your OS.You'll also find useful information at http://developer.qt.nokia.com/wiki/Category:LanguageBindings::PySide
Happy hacking!
You should use properties instead of getter and setter.
ReplyDeleteWell, I actually use properties, the Qt-way.
ReplyDeletemessage = QtCore.Property(unicode, getMessage, setMessage, notify=messageChanged)
I need to specify the signal which will be emitted when the prop value changed. This is done with 'notify' as you can see above.
This code dont work here. Show the message:
ReplyDeletemessage = QtCore.Property(unicode, getMessage, setMessage, notify=messageChanged) AttributeError: 'module' object has no attribute 'Property'
This can be due to that you're using an old version of PySide, I got the same message when running with 'python-pyside-0.4.1-0ubuntu1'
ReplyDeletehum, thanks. Now it works fine =].
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDelete