Python操作qml对象
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())
-- END --
Python操作qml对象的更多相关文章
- Python操作Word:常用对象介绍
前面已经介绍过了试用win32com类库来进行Word开发,系列文章<Python操作Word>是继承了前面的文章,所以,你应该先查看前面的文章,其实只有两篇,文章地址列在最下面的参考资料 ...
- Python itertools 操作迭代对象
Python 的内建模块itertools提供了很多操作迭代对象的方法 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/101778314 ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python操作RabbitMQ
RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...
- python——操作Redis
在使用django的websocket的时候,发现web请求和其他当前的django进程的内存是不共享的,猜测django的机制可能是每来一个web请求,就开启一个进程去与web进行交互,一次来达到利 ...
- Python 操作 MySQL 之 pysql 与 ORM(转载)
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- Python操作Redis、Memcache、RabbitMQ、SQLAlchemy
Python操作 Redis.Memcache.RabbitMQ.SQLAlchemy redis介绍:redis是一个开源的,先进的KEY-VALUE存储,它通常被称为数据结构服务器,因为键可以包含 ...
- Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy、
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
随机推荐
- Java集合--Collection
概要 首先,我们对Collection进行说明.下面先看看Collection的一些框架类的关系图: Collection是一个接口,它主要的两个分支是:List 和 Set. List和Set都是接 ...
- 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理
理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...
- Java中的Listener 监听器
Listener的定义与作用 监听器Listener就是在application,session,request三个对象创建.销毁或者往其中添加修改删除属性时自动执行代码的功能组件. Listener ...
- Log 日志收集
class Log { private readonly static String DateFormat = "yyyyMMdd"; private readonly stati ...
- stm32中阻塞模式和非阻塞模式 in blocking mode 与 in non-blocking mode区别
阻塞模式和非阻塞模式...... 我的理解是:阻塞模式就像是一个延时函数,当这个函数没处理完那么,所有的按照流程需要执行的代码都不会被执行,要等到这个延时完成,类似 平时看书上写的LED灯闪烁,用的d ...
- C# 任务、线程、同步(四)
Timer 类使用 static void Main(string[] args) { ThreadingTimer(); TimersTimer(); Console.Read(); } stati ...
- SIGAI机器学习第七集 k近邻算法
讲授K近邻思想,kNN的预测算法,距离函数,距离度量学习,kNN算法的实际应用. KNN是有监督机器学习算法,K-means是一个聚类算法,都依赖于距离函数.没有训练过程,只有预测过程. 大纲: k近 ...
- VS tools
官方下载,有免费也有试用的 http://visualstudiogallery.msdn.microsoft.com/ VS2012简单的使用感受+插件推荐 http://blog.sina.com ...
- java项目添加log4j打印日志+转换系统时间
1.pom.xml文件引入依赖如下: <dependency> <groupId>org.springframework.boot</groupId> <ar ...
- adb命令积累
1. 模拟事件全部是通过input命令来实现的,首先看一下input命令的使用: (原文:http://blog.csdn.net/huiguixian/article/details/1192538 ...