«

case 2:qml发信号给Python

admin 发布于 阅读:167 PyGUI


第一步:给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)
}

python QML