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使用递归解决全排列数字示例
Feb 11 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
在类Unix系统上开始Python3编程入门
Aug 20 Python
微信跳一跳辅助python代码实现
Jan 05 Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
python 循环数据赋值实例
Dec 02 Python
Python configparser模块操作代码实例
Jun 08 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
python 模拟登陆163邮箱
Dec 15 Python
Opencv实现二维直方图的计算及绘制
Jul 21 Python
python数字图像处理:图像简单滤波
Jun 28 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无限极分类的案例教程
2016/05/09 PHP
比较完整的微信开发php代码
2016/08/02 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
node内置调试方法总结
2018/02/22 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
PyCharm代码格式调整方法
2018/05/23 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
python ChainMap的使用和说明详解
2019/06/11 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python中的测试框架
2020/11/13 Python
《金钱的魔力》教学反思
2014/02/24 职场文书
公司年会主持词
2014/03/22 职场文书
中秋节主持词
2014/04/02 职场文书
幼儿园春季开学寄语
2014/04/03 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
市场策划求职信
2014/08/07 职场文书
纪录片信仰观后感
2015/06/08 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis