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批量修改文件后缀示例代码分享
Dec 24 Python
python之yield表达式学习
Sep 02 Python
利用Python中的输入和输出功能进行读取和写入的教程
Apr 14 Python
python executemany的使用及注意事项
Mar 13 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
关于python列表增加元素的三种操作方法
Aug 22 Python
Python设计模式之工厂方法模式实例详解
Jan 18 Python
Python实现查找数据库最接近的数据
Jun 08 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
javascript编程起步(第七课)
2007/02/27 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
python抓取网页图片并放到指定文件夹
2014/04/24 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
20招让你的Python飞起来!
2016/09/27 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
python实现聊天小程序
2018/03/13 Python
基于Python log 的正确打开方式
2018/04/28 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
python如何安装下载后的模块
2020/07/03 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Notino法国:购买香水和化妆品
2019/04/15 全球购物
体育教师自我鉴定
2014/02/12 职场文书
投标担保书范文
2014/04/02 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL