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 08 Python
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
python 函数中的参数类型
Feb 11 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Python计算信息熵实例
Jun 18 Python
python Tkinter的简单入门教程
Apr 11 Python
Pandas加速代码之避免使用for循环
May 30 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 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和ACCESS写聊天室(六)
2006/10/09 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
python常见排序算法基础教程
2017/04/13 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
Python连接字符串过程详解
2020/01/06 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
自我介绍演讲稿
2014/01/15 职场文书
运动会稿件200字
2014/02/07 职场文书
骨干教师考核方案
2014/05/09 职场文书
经营理念标语
2014/06/21 职场文书
单位在职证明书
2014/09/11 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
《秋思》教学反思
2016/02/23 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang