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,函数
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
浅谈视觉设计的准确性
2007-09-18 17:59:00
![](https://img.aspxhome.com/file/uploadpic/20079/18/20079181814327.gif)
将多宿主计算机配置为SQL Server访问
2011-01-04 16:17:00
ASP同一站点不同编码程序出现乱码解决办法
2008-11-10 12:08:00
pytorch dataloader 取batch_size时候出现bug的解决方式
2023-08-12 01:27:45
课程讲解 如何使用SQL Server校勘功能
2009-01-13 13:27:00
![](https://img.aspxhome.com/file/UploadPic/20091/200911419550985.jpg)
在Oracle中向视图中插入数据的方法
2009-02-28 10:42:00
MS Server和Oracle中对NULL处理的一些细节差异
2009-06-10 17:35:00
Keras官方中文文档:性能评估Metrices详解
2023-07-15 00:27:40
![](https://img.aspxhome.com/file/2023/5/62615_0s.jpg)
Python开发企业微信机器人每天定时发消息实例
2022-11-17 14:37:27
![](https://img.aspxhome.com/file/2023/6/64726_0s.png)
网页设计者应当注意九大要点
2007-08-10 13:30:00
python tornado使用流生成图片的例子
2023-08-24 07:07:20
利用Python3分析sitemap.xml并抓取导出全站链接详解
2022-01-26 16:27:08
![](https://img.aspxhome.com/file/2023/8/68358_0s.png)
使用php shell命令合并图片的代码
2023-06-21 22:34:35
PHP格式化显示时间date()函数案例讲解
2023-06-13 06:45:34
100%全屏布局设计
2009-05-15 12:24:00
详解php中implode explode serialize json msgpack性能对比
2023-09-03 18:00:19
自动更新程序的设计框架
2009-08-12 13:00:00
![](https://img.aspxhome.com/file/UploadPic/20098/12/1124390-80s.jpg)
CSS模块化设计
2009-01-05 12:10:00
Python读取图片为16进制表示简单代码
2021-07-24 09:34:15
![](https://img.aspxhome.com/file/2023/1/71381_0s.png)
详解Python静态网页爬取获取高清壁纸
2023-10-18 08:27:42
![](https://img.aspxhome.com/file/2023/4/63214_0s.png)