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实现的建造者模式示例
Aug 06 Python
利用Python检测URL状态
Jul 31 Python
Python实现时间序列可视化的方法
Aug 06 Python
Python配置文件处理的方法教程
Aug 29 Python
Django实现文件上传和下载功能
Oct 06 Python
python读写文件write和flush的实现方式
Feb 21 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
Python读取JSON数据操作实例解析
May 18 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 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之第九天
2006/10/09 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
mongodb和php的用法详解
2019/03/25 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
JQuery 操作select标签实现代码
2010/05/14 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
小米5s微信跳一跳小程序python源码
2018/01/08 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
Python日志器使用方法及原理解析
2020/09/27 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
struct和class的区别
2015/11/20 面试题
最新茶叶店创业计划书
2014/01/14 职场文书
食品安全工作方案
2014/05/07 职场文书
绿色环保标语
2014/06/12 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
个人买房协议书范本
2014/10/06 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
三八节祝酒词
2015/08/11 职场文书
Python简易开发之制作计算器
2022/04/28 Python
详解flex:1什么意思
2022/07/23 HTML / CSS