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通过poll实现异步IO的方法
Jun 04 Python
Python批量修改文本文件内容的方法
Apr 29 Python
python自动裁剪图像代码分享
Nov 25 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
python实现flappy bird小游戏
Dec 24 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
基于python实现破解滑动验证码过程解析
May 28 Python
python实现批量命名照片
Jun 18 Python
Python中可变和不可变对象的深入讲解
Aug 02 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中上传大体积文件时需要的设置
2006/10/09 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
PHP代码优化的53个细节
2014/03/03 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
vue mounted组件的使用
2018/06/18 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
python列表操作实例
2015/01/14 Python
实例讲解Python爬取网页数据
2018/07/08 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python银行系统实战源码
2019/10/25 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
python时间time模块处理大全
2020/10/25 Python
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
PHP笔试题
2012/02/22 面试题
电气自动化个人求职信范文
2014/02/03 职场文书
安全教育月活动总结
2014/05/05 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
2016年教师节感言
2015/12/09 职场文书
六年级语文教学反思
2016/03/03 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Python何绘制带有背景色块的折线图
2022/04/23 Python