I would recommend sub classing QQuickView and set the property in its root context, for example MainWindow. Now you need to add functions in this class with decorations such as @pyqtSlot ('QString'), and then you can set the event handler using onClicked: MainWindow.FunctionName (Arguments_According_To_Decoration)
Then your main.py will look like this
#!/bin/env python3 # -*- coding: utf-8 -*- from PyQt5.QtCore import pyqtSlot from PyQt5.QtCore import QUrl from PyQt5.QtQuick import QQuickView from PyQt5.QtWidgets import QApplication import sys class MainWindow(QQuickView): def __init__(self): super().__init__() self.setSource(QUrl('sample.qml')) self.rootContext().setContextProperty("MainWindow", self) self.show() @pyqtSlot('QString') def Print(self, value): print(value) if __name__ == '__main__': app = QApplication(sys.argv) w = MainWindow() sys.exit(app.exec_())
And sample.qml like that
import QtQuick 2.0 import QtQuick.Controls 2.2 Rectangle { width: 200; height: 200 Button { text: "print Hello World" onClicked: MainWindow.Print('hello world') } }
You can find more detailed information in the documents.
http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html
Rikard Sรถderstrรถm
source share