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批量同步web服务器代码核心程序
Sep 01 Python
python通过索引遍历列表的方法
May 04 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
python 贪心算法的实现
Sep 18 Python
Python 中的Sympy详细使用
Aug 07 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 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 flush类输出缓冲剖析
2008/10/19 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
vue 全局环境切换问题
2019/10/27 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
Python批量转换文件编码格式
2015/05/17 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python发展史及网络爬虫
2019/06/19 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
万里长城导游词
2015/01/30 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
2015年工会工作总结
2015/03/30 职场文书
总账会计岗位职责
2015/04/02 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
员工手册董事长致辞
2015/07/29 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
详解Vue slot插槽
2021/11/20 Vue.js