Python操作qml对象过程详解


Posted in Python onSeptember 26, 2019

1. 如何在python里获得qml里的对象?

1.1 获取根对象

QML:

import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
  id: window
  width: 250
  height: 500
  visible: true
  // ...
}

Python:

使用QQmlApplicationEngine类的rootObjects方法,返回的是一个列表,取索引0即是根对象。

engine = QQmlApplicationEngine()
engine.load('qml-test.qml')
root_obj = engine.rootObjects()[0]

这样就会获得id为window的ApplicationWindow对象。

1.2 获取任意对象

需要在qml文件中加入objecName属性!

QML:

import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
  id: window
  width: 250
  height: 500
  visible: true
  Text {
    id: txt
    objectName: "txt"
    text: "Click Me"
    font.pixelSize: 20
    anchors.centerIn: parent
  }
}

Python:

engine = QQmlApplicationEngine()
engine.load('qml-test.qml')
txt_obj = engine.rootObjects()[0].findChild(QObject, "txt")

2. 如何在python里读取和设置qml对象的属性和值?

2.1 读取对象的属性(如Text对象)

首先通过 findChild 获取Text对象(注意 txt 是qml文件里的 objectName):

txt_obj = engine.rootObjects()[0].findChild(QObject, "txt")

然后获取Text对象的text属性(使用 property):

txt_value = txt_obj.property("text")

2.2 设置对象的属性

使用setProperty方法可以更改对象的属性值。

txt_obj.setProperty("text", "Clicked!")

完整代码:

import sys
from PyQt5.QtCore import QObject
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load('qml-test.qml')

# 根对象
root_obj = engine.rootObjects()[0]

# Text对象
txt_obj = engine.rootObjects()[0].findChild(QObject, "txt")

# 读取属性值
txt_value = txt_obj.property("text")

# 设置属性值
txt_obj.setProperty("text", "Clicked!")

sys.exit(app.exec())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现合并字典的方法
Jul 07 Python
Python+django实现简单的文件上传
Aug 17 Python
Python编程之string相关操作实例详解
Jul 22 Python
python基础教程项目四之新闻聚合
Apr 02 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
Python smtplib实现发送邮件功能
May 22 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
python3 写一个WAV音频文件播放器的代码
Sep 27 Python
基于python中__add__函数的用法
Nov 25 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
python使用布隆过滤器的实现示例
Aug 20 Python
python 字典的打印实现
Sep 26 #Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 #Python
QML使用Python的函数过程解析
Sep 26 #Python
python 怎样将dataframe中的字符串日期转化为日期的方法
Sep 26 #Python
python3多线程知识点总结
Sep 26 #Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 #Python
Python容器使用的5个技巧和2个误区总结
Sep 26 #Python
You might like
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
JS前端加密算法示例
2016/12/22 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python对Excel的读取的示例代码
2020/02/14 Python
python实现人像动漫化的示例代码
2020/05/17 Python
python名片管理系统开发
2020/06/18 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
大学应届生的自我评价
2014/03/06 职场文书
健康家庭事迹材料
2014/05/02 职场文书
老龙头导游词
2015/02/11 职场文书
生日祝酒词大全
2015/08/10 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript