case 2:qml发信号给Python
第一步:给QML按钮添加一个触发事件,onClicked,发出一个带参数的信号,print_hello("这是QMl触发的信号:收到!")
第二步:在QML的最外层里面定义一个信号,供Python加载qml文件时连接。signal print_hello(string hello)
第三步:定义一个@Slot函数my_function,接收到QML的信号后要处理的事情。
第四步:将槽函数连接到 QML 中的信号。
import sys
from PySide6.QtCore import QUrl, Slot
from PySide6.QtWidgets import QApplication
from PySide6.QtQuick import QQuickView
# 第三步:定义一个Slot函数,接收到QML的信号后要处理的事情。
@Slot(str)
def my_function(hello):
hello = hello * 3
print("重要的事情说三遍!", hello)
if __name__ == "__main__":
app = QApplication(sys.argv)
view = QQuickView()
view.setSource(QUrl("main.qml"))
view.show()
root_object = view.rootObject()
if root_object is None:
print("No root object")
sys.exit(-1)
# 第四步:将槽函数连接到 QML 中的信号。
root_object.print_hello.connect(my_function)
sys.exit(app.exec())
import QtQuick 2.5
import QtQuick.Controls 2.5
Rectangle {
width: 640
height: 480
color: "lightgray"
Text {
text: "Hello, World!"
anchors.centerIn: parent
font.pointSize: 24
}
Button {
x: 20
y: 20
font.pointSize: 12
width: 100
height: 30
text: "OK" // 按钮显示的文本
// 第一步:定义信号触发条件:单击按钮,触发print_hello
onClicked: {
print_hello("这是QMl触发的信号:收到!")
}
}
// 第二步:定义信号,供Python连接
signal print_hello(string hello)
}