PyQt5 QML Signal zum Python Slot?

8

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?

    
berg 02.10.2013, 06:25
quelle

2 Antworten

13

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:

%Vor%

Dann können Sie sich einfach mit Ihrem Python-Code verbinden:

%Vor%     
mata 15.10.2013, 18:13
quelle
1

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

Ссылка

    
Rikard Söderström 25.08.2017 19:49
quelle

Tags und Links