有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 qt信号在qml 的使用_QML使用Python的函数过程解析相关推荐

  1. python qt信号在qml 的使用_QML与Python通信

    对于Python3和QML通信,实际上就是 PyQt5+QML+Python3混合编程,这是必须的,因为QML做图形界面比较容易,但是做功能实现就用Python比较好,虽然QML也能嵌入 JavaSc ...

  2. python qt信号在qml 的使用_Python和C++混合使用QML开发GUI

    pyqt和qml结合的中文资很少,在baidu上搜索,基本上就是浪费时间.在国外的blog上,有零星的几篇,但是介绍好的少.在stackoverflow上看到一篇关于pyside,发现pyside,发 ...

  3. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

    目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...

  4. python qt gui与数据可视化编程 pdf_《Python Qt GUI与数据可视化编程》第13章

    第13章 PyQtDataVisualization三维绘图 Data Visualization是Qt中的一个三维数据可视化模块,可以绘制三维柱状图.三维散点图.三维曲面等.Data Visuali ...

  5. python爬取论坛付费内容_Python爬虫抓取论坛关键字过程解析

    前言: 之前学习了用python爬虫的基本知识,现在计划用爬虫去做一些实际的数据统计功能.由于前段时间演员的诞生带火了几个年轻的实力派演员,想用爬虫程序搜索某论坛中对于某些演员的讨论热度,并按照日期统 ...

  6. python if调用函数,Python根据字符串调用函数过程解析

    1.使用 getattr(object, name, default=None) 获取属性 # -*- encoding=utf-8 -*- class Test: def __init__(self ...

  7. python 爬虫可视化编程_Python爬虫爬取博客实现可视化过程解析

    源码: from pyecharts import Bar import re import requests num=0 b=[] for i in range(1,11): link='https ...

  8. python urllib发送post请求_python爬虫 urllib模块发起post请求过程解析

    urllib模块发起的POST请求 案例:爬取百度翻译的翻译结果 1.通过浏览器捉包工具,找到POST请求的url 针对ajax页面请求的所对应url获取,需要用到浏览器的捉包工具.查看百度翻译针对某 ...

  9. python进程池的实现原理_Python基于进程池实现多进程过程解析

    1.注意:pool必须在 if __name__ == '__main__' 下面运行,不然会报错 2.多进程内出现错误会直接跳过该进程,并且默认不会打印错误信息 3.if__name__下面的数据需 ...

最新文章

  1. maven 学习笔记(一)eclipse+android+maven
  2. neo4j——图数据库初探 - JDream314的专栏 - 博客频道 - CSDN.NET
  3. Dreamweaver 2020安装教程
  4. 【Android】页面栈
  5. 数据结构与算法--再谈递归与循环(斐波那契数列)
  6. TCP的三次握手过程与四次挥手
  7. 你不知道的思维导图能做的事
  8. Tip:创建SCOM 2012 R2报表服务器时的报错
  9. 微信小程序this.setData如何修改对象、数组中的值
  10. windows运行命令大全
  11. java入门必备基础知识(超超超详细讲解)
  12. win10 休眠设置无效_win10休眠设置无效的解决教程
  13. 分享线下活动丨物联网走进UIC
  14. ensp报错AR40,无法修改IP地址解决办法。
  15. aws mysql 费用_AWS 免费一年套餐详解
  16. 怎么理解VGG-16结构图中的block
  17. linux 解压所有以zip结尾的文件_Linux下的压缩zip,解压缩unzip命令详解及实例
  18. 定积分黎曼求和的简化
  19. java dispo lock_java实现文件上传和下载(1)
  20. insert --01--insert into 语句的三种写法

热门文章

  1. Visual Studio 2015 和 Apache Cordova 跨平台开发入门(一)
  2. 4.3.2 用jQuery进行异步加载(1)
  3. git对指定commitid 打tag_git 回退版本到之前提交的tag或commit内容代码
  4. ivona tts语音合成引擎_高端玩家!树莓派 + Node.js 实现语音机器人
  5. Learning Multiview 3D point Cloud Registration论文阅读笔记
  6. leetcode - 801. 使序列递增的最小交换次数
  7. 【本地差分隐私与随机响应代码实现】差分隐私代码实现系列(十三)
  8. 【链接攻击,差分攻击,去标识化代码实现】差分隐私代码实现系列(二)
  9. excel公式:用countif、match、index合并同类项
  10. C++/C--Windows下获取键盘事件