I'm trying to send data from QML to Python, but I'm getting an error.
test.py:
#!/usr/bin/env python
import sys
from PySide import QtCore, QtGui, QtDeclarative
class Test( QtCore.QObject ):
def __init__( self ):
QtCore.QObject.__init__(self)
@QtCore.Slot()
def printText(self,text):
print text
class MainWindow( QtDeclarative.QDeclarativeView ):
def __init__( self, parent=None ):
super( MainWindow, self ).__init__( parent )
self.setWindowTitle( "Test" )
self.setSource( QtCore.QUrl.fromLocalFile( './test.qml' ) )
self.setResizeMode( QtDeclarative.QDeclarativeView.SizeRootObjectToView )
app = QtGui.QApplication( sys.argv )
window = MainWindow()
context = window.rootContext()
context.setContextProperty("testModel",Test())
window.show()
sys.exit( app.exec_() )
test.qml:
import QtQuick 1.0
Rectangle {
width: 200
height: 200
color: "white"
Rectangle {
anchors.centerIn: parent
width: 100
height: 50
color: "black"
Text {
anchors.centerIn: parent
text: "click"
color: "white"
}
MouseArea {
anchors.fill: parent
onClicked: {
testModel.printText("test")
}
}
}
}
When the button is clicked, I expected it to print "test" but instead I get this error:
TypeError: printText() takes exactly 2 arguments (1 given)
What am I missing?
EDIT: changed the example to a simpler one.
I forgot to specify the slot's argument type. Fixed it by changing the declaration of printText() to this:
@QtCore.Slot('QString')
def printText(self,text):
print text
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With