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 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
django 将model转换为字典的方法示例
Oct 16 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
python3.6数独问题的解决
Jan 21 Python
Python 3.8新特征之asyncio REPL
May 28 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
python实现二分类的卡方分箱示例
Nov 22 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
[转帖]PHP世纪万年历
2006/12/06 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
JavaScript 创建对象
2009/07/17 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
cookie的secure属性详解
2015/04/08 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
Python标准异常和异常处理详解
2015/02/02 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
python实现大文件分割与合并
2019/07/22 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Python如何批量生成和调用变量
2020/11/21 Python
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
为什么要有struct关键字
2012/05/08 面试题
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
2014年自我评价
2014/01/04 职场文书
高一物理教学反思
2014/01/24 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript