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 06 Python
Python写的Socks5协议代理服务器
Aug 06 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
Python 数据结构之旋转链表
Feb 25 Python
Python三级菜单的实例
Sep 13 Python
tornado 多进程模式解析
Jan 15 Python
python实现requests发送/上传多个文件的示例
Jun 04 Python
Python制作exe文件简单流程
Jan 24 Python
django如何通过类视图使用装饰器
Jul 24 Python
Python如何在bool函数中取值
Sep 21 Python
Python控制鼠标键盘代码实例
Dec 08 Python
Python Django搭建文件下载服务器的实现
May 10 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 数组和字符串互相转换实现方法
2013/03/26 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
win10系统中安装scrapy-1.1
2016/07/03 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
浅析Python3 pip换源问题
2020/01/06 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
python创建文本文件的简单方法
2020/08/30 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
物流经理自我评价
2013/09/23 职场文书
教师档案管理制度
2014/01/23 职场文书
优秀教师获奖感言
2014/01/31 职场文书
机关搬迁方案
2014/05/18 职场文书
村级个人对照检查材料
2014/08/22 职场文书
单位单身证明样本
2014/10/11 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
端午节活动总结报告
2015/02/11 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
css3新特性的应用示例分析
2022/03/16 HTML / CSS
Python与C++中梯度方向直方图的实现
2022/03/17 Python