QML使用Python的函数过程解析


Posted in Python onSeptember 26, 2019

有2种方法:

一、 QML中定义一个信号,连接Python里的函数;

这里的函数不用特意指明为槽函数,普通函数即可。

QML的信号连接Python的函数

QML:

首先在QML中定义一个信号,这里的信号传递一个字符串给函数(信号可带参数也可不带):

signal mySignal(string my_string)

然后在click中发射这个信号:

onClicked:{
  root.mySignal("hello world")
}

Python:

使用QML里的信号连接Python里的函数:

engine.rootObjects()[0].mySignal.connect(my_func) # 这里的mySignal是在QML里定义的

完整代码:

QML:

import QtQuick 2.12
import QtQuick.Controls 2.12

ApplicationWindow {
  id: root
  width: 250
  height: 500
  visible: true

  signal mySignal(string my_string)

  MouseArea {
    id: mouse_area
    anchors.fill: parent
    onClicked: {
      root.mySignal("hello world")
    }
  }
}

Python:

from PyQt5.QtCore import QObject
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
import sys
class MyWindow(QObject):
  def __init__(self):
    super().__init__()
    self.engine = QQmlApplicationEngine()
    self.engine.load('qml-test.qml')

    # root signal
    my_obj = self.engine.rootObjects()[0]
    my_obj.mySignal.connect(self.my_func)

  def my_func(self, my_string):
    print(my_string)
if __name__ == '__main__':
  app = QGuiApplication(sys.argv)
  window = MyWindow()
  sys.exit(app.exec())

二、 Python中定义一个类及槽函数,在QML中使用这个槽函数

在QML中调用Python中的槽函数

首先需要在Python里定义一个类,在类里写一个槽函数:

class Person(QObject):
  def __init__(self):
    super().__init__()

  @pyqtSlot() # 注意是槽函数!
  def begin(self):
    print('begin')

然后通过setContextProperty将这个类设置为上下文的一个属性值:

person = Person()
engine.rootContext().setContextProperty('person', person)

QML文件里不需特别设置,直接调用函数即可。

完整代码:

Python:

from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, pyqtSlot
import sys
class Person(QObject):
  def __init__(self):
    super().__init__()

  @pyqtSlot() # 注意是槽函数!
  def begin(self):
    print('begin')
if __name__ == '__main__':
  app = QGuiApplication(sys.argv)
  engine = QQmlApplicationEngine()

  person = Person()
  engine.rootContext().setContextProperty('person', person)

  engine.load('qml-test.qml')
  sys.exit(app.exec())

QML:

import QtQuick 2.12
import QtQuick.Controls 2.12

ApplicationWindow {
  id: root
  width: 250
  height: 500
  visible: true

  Button{
      text:qsTr("begin")
      onClicked: {
        person.begin()
      }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
决策树的python实现方法
Nov 18 Python
python每隔N秒运行指定函数的方法
Mar 16 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
Python道路车道线检测的实现
Jun 27 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
Sep 26 #Python
python3多线程知识点总结
Sep 26 #Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 #Python
Python容器使用的5个技巧和2个误区总结
Sep 26 #Python
通过python3实现投票功能代码实例
Sep 26 #Python
Python编写打字训练小程序
Sep 26 #Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 #Python
You might like
php 获取全局变量的代码
2011/04/21 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
ES6实现的遍历目录函数示例
2017/04/07 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
理解Python垃圾回收机制
2016/02/12 Python
python 多个参数不为空校验方法
2019/02/14 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
协议书与合同的区别
2014/04/18 职场文书
应届生自荐信
2014/06/30 职场文书
医学专业大学生求职信
2014/07/12 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python