QML使用Python的函数过程解析
作者:ibg 时间:2021-12-10 19:20:31
有2种方法:
一、 QML中定义一个信号,连接Python里的函数;
这里的函数不用特意指明为槽函数,普通函数即可。
QML的信号连接Python的函数
QML:
首先在QML中定义一个信号,这里的信号传递一个字符串给函数(信号可带参数也可不带):
signal mySignal(string my_string)
然后在click中发射这个信号:
onClicked:{
root.mySignal("hello world")
}
Python:
使用QML里的信号连接Python里的函数:
engine.rootObjects()[0].mySignal.connect(my_func) # 这里的mySignal是在QML里定义的
完整代码:
QML:
import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
id: root
width: 250
height: 500
visible: true
signal mySignal(string my_string)
MouseArea {
id: mouse_area
anchors.fill: parent
onClicked: {
root.mySignal("hello world")
}
}
}
Python:
from PyQt5.QtCore import QObject
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
import sys
class MyWindow(QObject):
def __init__(self):
super().__init__()
self.engine = QQmlApplicationEngine()
self.engine.load('qml-test.qml')
# root signal
my_obj = self.engine.rootObjects()[0]
my_obj.mySignal.connect(self.my_func)
def my_func(self, my_string):
print(my_string)
if __name__ == '__main__':
app = QGuiApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec())
二、 Python中定义一个类及槽函数,在QML中使用这个槽函数
在QML中调用Python中的槽函数
首先需要在Python里定义一个类,在类里写一个槽函数:
class Person(QObject):
def __init__(self):
super().__init__()
@pyqtSlot() # 注意是槽函数!
def begin(self):
print('begin')
然后通过setContextProperty将这个类设置为上下文的一个属性值:
person = Person()
engine.rootContext().setContextProperty('person', person)
QML文件里不需特别设置,直接调用函数即可。
完整代码:
Python:
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, pyqtSlot
import sys
class Person(QObject):
def __init__(self):
super().__init__()
@pyqtSlot() # 注意是槽函数!
def begin(self):
print('begin')
if __name__ == '__main__':
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
person = Person()
engine.rootContext().setContextProperty('person', person)
engine.load('qml-test.qml')
sys.exit(app.exec())
QML:
import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
id: root
width: 250
height: 500
visible: true
Button{
text:qsTr("begin")
onClicked: {
person.begin()
}
}
}
来源:https://www.cnblogs.com/ibgo/p/11589613.html
标签:qml,python,函数
0
投稿
猜你喜欢
Django REST Swagger实现指定api参数
2023-03-10 05:48:58
Python常用数字处理基本操作汇总
2021-01-06 12:56:28
SQL 中STUFF用法
2024-01-25 01:14:30
javascript的document.referrer浏览器支持、失效情况总结
2024-05-13 09:35:51
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2023-12-17 06:55:01
vue.js默认路由不加载linkActiveClass问题的解决方法
2024-05-02 16:53:25
windows上安装python3教程以及环境变量配置详解
2023-11-11 08:09:35
Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解
2024-01-26 22:24:12
python小项目之五子棋游戏
2022-07-12 06:24:23
php之app消息推送案例教程
2023-06-15 00:42:02
ASP+XML制作菜单管理
2008-05-19 12:38:00
numpy数组坐标轴问题解决
2022-10-23 02:48:12
OpenCV绘制圆角矩形的方法实例
2023-07-15 11:37:17
Python CSS选择器爬取京东网商品信息过程解析
2022-01-17 21:18:17
Mysql安装 Navicat 出现1044/1045错误的解决方法
2024-01-15 18:13:30
在Python的web框架中中编写日志列表的教程
2021-11-06 05:15:29
python+pillow绘制矩阵盖尔圆简单实例
2022-07-04 02:44:39
SQLSERVER2008中CTE的Split与CLR的性能比较
2024-01-28 06:56:04
详解vue的diff算法原理
2023-07-02 16:49:44
.net 上传文件前所未有的简单
2023-07-17 23:20:04