在这些情况下,最佳实践是创建一个QObject,将其导出到QML并在那里进行连接,这也是在C ++中完成的。
main.py
from PySide2.QtCore import QObject, QUrl, Slotfrom PySide2.QtGui import QGuiApplicationfrom PySide2.QtQml import QQmlApplicationEngineclass Foo(QObject): @Slot(str) def test_slot(self, string): print(string)if __name__ == "__main__": import os import sys app = QGuiApplication() foo = Foo() engine = QQmlApplicationEngine() engine.rootContext().setContextProperty("foo", foo) qml_file = "main.qml" current_dir = os.path.dirname(os.path.realpath(__file__)) filename = os.path.join(current_dir, qml_file) engine.load(QUrl.fromLocalFile(filename)) if not engine.rootObjects(): sys.exit(-1) sys.exit(app.exec_())main.qml
import QtQuick 2.13import QtQuick.Controls 2.13ApplicationWindow { visible: true Button { anchors.centerIn: parent text: "Example" onClicked: foo.test_slot("Test") }}注意: 所有C ++ / QML良好实践也都适用于Python / QML,且更改和限制最少。



