前言
上位机通过 Python 丰富的软件包,调用系统的硬件资源,在 QML 中进行交互,比如通过上位机点击按键打开 Python 串口功能,并上报 Python 串口数据到 QML 界面。
- QML 中调用 Python 方法
- Python 数据上报到 QML:信号方式
实现
- 自定义类
PythonLogic.py
from PySide6.QCore import QObject, Slot, Signal
class PythonLogic(QObject):
sig = Signal(list)
@Slot()
def say_hello(self):
print("Hello from Python!")
self.sig.emit([1,2,3,4])
- 注册对象
main.py
import sys
from pathlib import Path
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
# 导入自定义对象
from PythonLogic import PythonLogic
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
# 注册方法
logic = PythonLogic()
engine.rootContext().setContextProperty("PythonLogic", logic)
qml_file = Path(__file__).resolve().parent / "main.qml"
engine.load(qml_file)
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())
- 使用 Python 方法
main.qml
import QtQuick.Window
import QtQuick.Controls
Window {
width: 640
height: 320
visible: true
title: qsTr("Hello World")
Button {
text: "Click me"
onClicked: PythonLogic.say_hello()
}
Connections {
target: PythonLogic // Python 自定义类
function onSig(data) { // on + 信号名(首字母大写)
console.log(data)
}
}