python qt信号在qml 的使用_QML使用Python的函数过程解析
有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的函数过程解析相关推荐
- python qt信号在qml 的使用_QML与Python通信
对于Python3和QML通信,实际上就是 PyQt5+QML+Python3混合编程,这是必须的,因为QML做图形界面比较容易,但是做功能实现就用Python比较好,虽然QML也能嵌入 JavaSc ...
- python qt信号在qml 的使用_Python和C++混合使用QML开发GUI
pyqt和qml结合的中文资很少,在baidu上搜索,基本上就是浪费时间.在国外的blog上,有零星的几篇,但是介绍好的少.在stackoverflow上看到一篇关于pyside,发现pyside,发 ...
- Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)
目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...
- python qt gui与数据可视化编程 pdf_《Python Qt GUI与数据可视化编程》第13章
第13章 PyQtDataVisualization三维绘图 Data Visualization是Qt中的一个三维数据可视化模块,可以绘制三维柱状图.三维散点图.三维曲面等.Data Visuali ...
- python爬取论坛付费内容_Python爬虫抓取论坛关键字过程解析
前言: 之前学习了用python爬虫的基本知识,现在计划用爬虫去做一些实际的数据统计功能.由于前段时间演员的诞生带火了几个年轻的实力派演员,想用爬虫程序搜索某论坛中对于某些演员的讨论热度,并按照日期统 ...
- python if调用函数,Python根据字符串调用函数过程解析
1.使用 getattr(object, name, default=None) 获取属性 # -*- encoding=utf-8 -*- class Test: def __init__(self ...
- python 爬虫可视化编程_Python爬虫爬取博客实现可视化过程解析
源码: from pyecharts import Bar import re import requests num=0 b=[] for i in range(1,11): link='https ...
- python urllib发送post请求_python爬虫 urllib模块发起post请求过程解析
urllib模块发起的POST请求 案例:爬取百度翻译的翻译结果 1.通过浏览器捉包工具,找到POST请求的url 针对ajax页面请求的所对应url获取,需要用到浏览器的捉包工具.查看百度翻译针对某 ...
- python进程池的实现原理_Python基于进程池实现多进程过程解析
1.注意:pool必须在 if __name__ == '__main__' 下面运行,不然会报错 2.多进程内出现错误会直接跳过该进程,并且默认不会打印错误信息 3.if__name__下面的数据需 ...
最新文章
- maven 学习笔记(一)eclipse+android+maven
- neo4j——图数据库初探 - JDream314的专栏 - 博客频道 - CSDN.NET
- Dreamweaver 2020安装教程
- 【Android】页面栈
- 数据结构与算法--再谈递归与循环(斐波那契数列)
- TCP的三次握手过程与四次挥手
- 你不知道的思维导图能做的事
- Tip:创建SCOM 2012 R2报表服务器时的报错
- 微信小程序this.setData如何修改对象、数组中的值
- windows运行命令大全
- java入门必备基础知识(超超超详细讲解)
- win10 休眠设置无效_win10休眠设置无效的解决教程
- 分享线下活动丨物联网走进UIC
- ensp报错AR40,无法修改IP地址解决办法。
- aws mysql 费用_AWS 免费一年套餐详解
- 怎么理解VGG-16结构图中的block
- linux 解压所有以zip结尾的文件_Linux下的压缩zip,解压缩unzip命令详解及实例
- 定积分黎曼求和的简化
- java dispo lock_java实现文件上传和下载(1)
- insert --01--insert into 语句的三种写法
热门文章
- Visual Studio 2015 和 Apache Cordova 跨平台开发入门(一)
- 4.3.2 用jQuery进行异步加载(1)
- git对指定commitid 打tag_git 回退版本到之前提交的tag或commit内容代码
- ivona tts语音合成引擎_高端玩家!树莓派 + Node.js 实现语音机器人
- Learning Multiview 3D point Cloud Registration论文阅读笔记
- leetcode - 801. 使序列递增的最小交换次数
- 【本地差分隐私与随机响应代码实现】差分隐私代码实现系列(十三)
- 【链接攻击,差分攻击,去标识化代码实现】差分隐私代码实现系列(二)
- excel公式:用countif、match、index合并同类项
- C++/C--Windows下获取键盘事件