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中的try和finally和with方法
May 05 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
Python如何把十进制数转换成ip地址
May 25 Python
python ETL工具 pyetl
Jun 07 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
Keras-多输入多输出实例(多任务)
Jun 22 Python
Python数据库封装实现代码示例解析
Sep 05 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
Python偏函数实现原理及应用
Nov 20 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
详解Python中的进程和线程
Jun 23 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中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP 中常量的知识整理
2017/04/14 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
jQuery之日期选择器的深入解析
2013/06/19 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
Python显示进度条的方法
2014/09/20 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
python中xrange用法分析
2015/04/15 Python
Python中static相关知识小结
2018/01/02 Python
Numpy之文件存取的示例代码
2018/08/03 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
python实现两个文件夹的同步
2019/08/29 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
校三好学生主要事迹
2014/01/11 职场文书
小学生评语大全
2014/04/18 职场文书
篝火晚会策划方案
2014/05/16 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书