PySide6 + QML - 信号与槽01 - Button 触发 Python 类方法
·
导言

如上所示,这是一个最小的标准的Pyside6 + QML前后端交互的框架。当用户点击GUI程序上的按钮时,运行一次Backend.print_something()函数。效果如下所示:
工程代码:
- github:https://github.com/q164129345/myPyside6_QML/tree/main/basic02_button_slot
- gitee:https://gitee.com/wallace89/myPyside6_QML/tree/main/basic02_button_slot
一、main.py
import sys
from PySide6.QtCore import QObject, Slot
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
class Backend(QObject):
@Slot()
def print_something(self):
print("hello,button")
if __name__ == "__main__":
# 创建应用程序和引擎
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
# qml与python交互
backend = Backend() # 实例化python后端对象
engine.rootContext().setContextProperty("backend", backend) # 注册到QML环境(名叫 “backend”)
# 加载QML文件
engine.addImportPath(sys.path[0]) # 当前项目路径
engine.loadFromModule("Example", "Main") # 模块(Example) + QML文件名(Main.qml)
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())
关键点说明
- Backend类
class Backend(QObject):
@Slot()
def print_something(self):
print("hello,button")
- 继承
QObject,才能作为 QML 与 Python 的桥梁。 @Slot()是 Qt 的“插槽”标记,QML 才能调用。
- 注册后端到QML
engine.rootContext().setContextProperty("backend", backend)
- 相当于告诉 QML:你在 QML 脚本里可以用 backend 这个对象。
- 之后在 QML 的 onClicked 里直接写 backend.print_something()。
二、Main.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
ApplicationWindow {
visible: true
width: 400
height: 300
title: qsTr("Hello PySide6 + QML")
Button {
text: "Click Me"
anchors.centerIn: parent
onClicked: backend.print_something()
}
}
关键点说明
Button {
text: "Click Me"
anchors.centerIn: parent
onClicked: backend.on_button_clicked()
}
- 当点击按钮时,就触发 Python 的 print_something 方法。
更多推荐


所有评论(0)