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 02 Python
浅析Python中的多进程与多线程的使用
Apr 07 Python
python中argparse模块用法实例详解
Jun 03 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
python 同时读取多个文件的例子
Jul 16 Python
基于Python解密仿射密码
Oct 21 Python
python反转列表的三种方式解析
Nov 08 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
Python设计密码强度校验程序
Jul 30 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 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
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
php 常用字符串函数总结
2008/03/15 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
JS分页效果示例
2013/10/11 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
Python中列表(list)操作方法汇总
2014/08/18 Python
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
基于python 字符编码的理解
2017/09/02 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
python和opencv实现抠图
2018/07/18 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
岗位职责的定义
2013/11/10 职场文书
四好少年事迹材料
2014/01/12 职场文书
元宵节主持词
2014/03/25 职场文书
户外宣传策划方案
2014/05/25 职场文书
干部作风建设工作总结
2014/10/29 职场文书
同学毕业留言寄语
2015/02/27 职场文书
暑假安全保证书
2015/02/28 职场文书
办公室个人总结
2015/02/28 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
python 离散点图画法的实现
2022/04/01 Python