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实现一个简单的能够发送带附件的邮件程序的教程
Apr 08 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
python代码实现ID3决策树算法
Dec 20 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
Jul 03 Python
django自带调试服务器的使用详解
Aug 29 Python
Python 获取项目根路径的代码
Sep 27 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
Python中X[:,0]和X[:,1]的用法
May 10 Python
Python语言中的数据类型-序列
Feb 24 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/07/23 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
深入解析Python中的变量和赋值运算符
2015/10/12 Python
python事件驱动event实现详解
2018/11/21 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
Python列表元素常见操作简单示例
2019/10/25 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
如何一键升级Python所有包
2020/11/05 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
2014新年寄语
2014/01/20 职场文书
晚会主持词开场白
2014/03/17 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
生活小常识广播稿
2015/08/19 职场文书
大学副班长竞选稿
2015/11/21 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL
如何解决php-fpm启动不了问题
2021/11/17 PHP
python全面解析接口返回数据
2022/02/12 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python