Wie kann eine Python-Methode / Slot mit einem QML-Signal verbunden werden? Es sieht so aus, als würde QtObject.connect () in PyQt4 funktionieren, aber es ist no länger verfügbar in PyQt5 .
%Vor%-
%Vor%Einige der PyQT-Beispiele leiten ein Objekt über "setContextProperty" in den QML-Kontext und geben dann QML-Ereignisse an die Slots dieses Objekts weiter, aber dieser Ansatz scheint umständlich. Gibt es einen besseren Weg?
qml_rectangle.mousePressEvent
ist kein Signal, es ist ein Ereignishandler, der bei Mausereignissen aufgerufen wird, sodass Sie keine Verbindung zu ihm herstellen können. Sie könnten es einfach durch Ihre Handler-Funktion ( qml_rectangle.mousePressEvent = on_qml_mouse_clicked
) ersetzen, aber das ist keine sehr saubere Art, mit Qt zu arbeiten.
Der bessere Weg wäre, ein Signal in Ihrer qml-Datei zu definieren und es aus dem onClicked
-Handler des Rechtecks zu emittieren:
Dann können Sie sich einfach mit Ihrem Python-Code verbinden:
%Vor%Ich würde die Unterklassierung von QQuickView empfehlen und eine Eigenschaft für ihren Stammkontext festlegen, zum Beispiel MainWindow . Jetzt müssen Sie nur noch Funktionen in dieser Klasse mit Verzierungen wie @pyqtSlot ('QString') hinzufügen und dann den Ereignishandler mit onClicked: MainWindow.FunctionName (Arguments_According_To_Decoration) festlegen )
Dann würde Ihre main.py so aussehen
%Vor%Und sample.qml wie so
%Vor%Weitere Informationen finden Sie in den Dokumenten