W jaki sposób można podłączyć metodę Pythona do sygnału QML? Wygląda na to, że QtObject.connect() był używany w PyQt4, ale jest to no longer available in PyQt5.PyQt5 QML Signal to Python Slot?
#Sample QML File (stack.qml)
import QtQuick 2.0
Rectangle {
MouseArea {
anchors.fill: parent
onClicked: {
// relay this to python
}
}
}
-
#Sample Python File
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQuick import QQuickView
if __name__ == '__main__':
import os
import sys
app = QGuiApplication(sys.argv)
view = QQuickView()
view.setWidth(500)
view.setHeight(500)
view.setTitle('Hello PyQt')
view.setResizeMode(QQuickView.SizeRootObjectToView)
view.setSource(QUrl.fromLocalFile(os.path.join(os.path.dirname(__file__),'stack.qml')))
def on_qml_mouse_clicked(mouse_event):
print 'mouse clicked'
view.show()
qml_rectangle = view.rootObject()
# this technique doesn't work #############################
qml_rectangle.mousePressEvent.connect(on_qml_mouse_clicked)
sys.exit(app.exec_())
Niektóre przykłady pyqt przechodzi obiekt w kontekście QML poprzez „setContextProperty”, a następnie przekazywanie zdarzeń QML szczelinom w tym przedmiocie, ale takie podejście wydaje ronda. Czy istnieje lepszy sposób?
działa świetnie! Dziękuję Ci! – berg