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使用win32com在百度空间插入html元素示例
Feb 20 Python
Python的ORM框架SQLAlchemy入门教程
Apr 28 Python
python存储16bit和32bit图像的实例
Dec 05 Python
python解析json串与正则匹配对比方法
Dec 20 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
Numpy的简单用法小结
Aug 28 Python
使用 Python 处理3万多条数据只要几秒钟
Jan 19 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
python如何删除文件、目录
Jun 23 Python
Python定义一个Actor任务
Jul 29 Python
Python OpenCV 图像平移的实现示例
Jun 04 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实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
python如何实现数据的线性拟合
2019/07/19 Python
python计算导数并绘图的实例
2020/02/29 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
函授毕业生的自我鉴定
2013/11/26 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
小学六一主持词开场白
2015/05/28 职场文书
创业计划书之美甲店
2019/09/20 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android