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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
详解如何减少python内存的消耗
Aug 09 Python
Python魔法方法 容器部方法详解
Jan 02 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
python使用建议技巧分享(三)
Aug 18 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
python 数据类型强制转换的总结
Jan 25 Python
PyTorch中的torch.cat简单介绍
Mar 17 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
Mysql的常用命令
2006/10/09 PHP
建立文件交换功能的脚本(二)
2006/10/09 PHP
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
php递归json类实例
2014/12/02 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
详解Python3中yield生成器的用法
2015/08/20 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
python 爬取疫情数据的源码
2020/02/09 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python如何转换字符串大小写
2020/06/04 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
揠苗助长教学反思
2014/02/04 职场文书
中秋手机店促销方案
2014/06/16 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
Java版 单机五子棋
2022/05/04 Java/Android