QML与python互相通信
解决python与QML的通信问题:
- QML中直接调用python函数
- python发送信号,QML响应信号并进行相应处理
py文件
# This Python file uses the following encoding: utf-8
import sys
from pathlib import Path
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import QObject, Slot, Signal
import time
# 定义一个类,将我们需要用到的方法、变量等都放到里面,便于调用
class myClass(QObject):
# sig = Signal(str, float, arguments=['name', 'value'])
sig = Signal(str, float) # str,float 为信号传递的参数类型, name,value 为QMl中使用它们时的名字, 也可以不写
def __init__(self):
super(myClass, self).__init__()
@Slot(str, result=int) # str 为say_hello的参数类型, result=int 表示QML接收的返回值为int类型
def say_hello(self, name):
print('hello,' + name)
return 999
@Slot() # 不需要接收输入参数,也不返回参数
def test(self):
time.sleep(1) # 模拟 do something
self.sig.emit('orange', 9.99)
print('信号已发出')
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
qml_file = Path(__file__).resolve().parent / "main.qml"
#################################################
# 实例化一个类,然后把它添加到QML文件的上下文中
x = myClass()
engine.rootContext().setContextProperty('pymyClass', x) # pymyClass 为在qml中调用时使用的名字,可以随便起
engine.load(qml_file)
#################################################
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())
QML文件
import QtQuick
import QtQuick.Window
import QtQuick.Controls
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
property int state: 0
Button {
id: buton1
text: "button_hello"
width: 100
height: 60
x: 100
y: 100
onClicked: {
state = pymyClass.say_hello("apple")
console.log('state: ' + state) // 使用 state 获取python函数的返回值
}
}
Button {
id: buton2
text: "button_test"
width: 100
height: 60
x: 400
y: 200
onClicked: {
console.log('发射信号') // 使用 state 获取python函数的返回值
pymyClass.test()
}
}
Connections {
target: pymyClass // 绑定python的类
ignoreUnknownSignals: true // 取消警告
function onSig(name, value) { // 使用 on + 信号名(首字母大写) 作为信号的槽
console.log('收到信号, name:', name, ', value:', value)
}
}
}
QML与python互相通信的更多相关文章
- Python Socket通信原理
[Python之旅]第五篇(一):Python Socket通信原理 python Socket 通信理论 socket例子 摘要: 只要和网络服务涉及的,就离不开Socket以及Socket编 ...
- python - socket通信笔记
参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket ...
- Python Socket通信黏包问题分析及解决方法
参考:http://www.cnblogs.com/Eva-J/articles/8244551.html#_label5 1.黏包的表现(以客户端远程操作服务端命令为例) 注:只有在TCP协议通信的 ...
- Python Socket通信例子
一.TCP 通信 服务端 #!/usr/bin/env python # -*- coding: utf-8 -*- # server_tcp.py import socket so = socket ...
- Python 串口通信 GUI 开发
在项目中遇到树莓派串口通信问题.由于本人一直从事.net 开发,希望将树莓派系统换成Win10 IOT版.但是在测试过程中出现无法找到串口的问题.最终也没有解决.最终按照领导要求,linux (了解不 ...
- Python TCP通信网络编程
最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一 ...
- python http通信实现
http协议通信需要httpServer和httpClient. 在python中 -- httpServer的实现类是server.py文件,要跟实现tcp,udp Server的文件sockets ...
- Python socket通信之FTP
Python中利用socket进行server端和client端通信是网络编程的基础,是最简单的传输范例. (懂网络的请自动跳过这一部分) 首先,要想通信,必须建立连接,建立连接的过程,需要clien ...
- python多进程通信实例分析
操作系统会为每一个创建的进程分配一个独立的地址空间,不同进程的地址空间是完全隔离的,因此如果不加其他的措施,他们完全感觉不到彼此的存在.那么进程之间怎么进行通信?他们之间的关联是怎样的?实现原理是什么 ...
- QML使用Python的函数
有2种方法: 一. QML中定义一个信号,连接Python里的函数: 这里的函数不用特意指明为槽函数,普通函数即可. QML的信号连接Python的函数 QML:首先在QML中定义一个信号,这里的信号 ...
随机推荐
- vulnhub靶场之RIPPER: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Ripper: 1,下载地址:https://download.vulnhub.com/ripper/Ripper.ova,下载后直接vbox打 ...
- idea正则替换
将非 (股权)的替换成 股权
- DateFormat类&SimpleDateFrormat类介绍-Dateformat类的format方法parse方法
DateFormat类&SimpleDateFrormat类介绍 java.text.DateFormat是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就 ...
- MySQL优化六,锁
一,MySQL中的锁 InnoDB中锁非常多,总的来说,可以如下分类: 这些锁都是做什么的?具体含义是什么?我们现在来一一学习. 1.2,解决并发事务问题 我们已经知道事务并发执行时可能带来的各种问题 ...
- drf-day5——反序列化类校验部分源码分析、断言、drf请求、drf响应、视图组件及两个视图基类、基于GenericAPIView+5个视图扩展类
目录 一.反序列化类校验部分源码解析(了解) 二.断言 三.drf之请求 3.1 Request能够解析的前端传入的编码格式 3.2 Request类有哪些属性和方法(学过) 常用参数 Respons ...
- C-01\编译器和链接器以及真正的入口函数
编译器: 工具 编译器 路径 VC++6.0 CL.EXE(一段shell)只负责分析命令行参数,真正功能实现在C1.DLL.C1XX.DLL.C2.DLL C:\Program Files (x86 ...
- Vue34 VueX
1 简介 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. vue官方搭配,专属使用 ...
- Spring事务失效原因分析解决
文章目录 1.方法内部调用 2.修饰符 3.非运行时异常 4.try-catch捕获异常 5.多线程调用 6.同时使用@Transactional和@Async 7.错误使用事务传播行为 8.使用的数 ...
- ECharts 饼图指定颜色显示
一.通过setOption的color属性分配颜色范围 先介绍这里提到的color属性 color:调色盘颜色列表.如果系列没有设置颜色,则会依次循环从该列表中取颜色作为系列颜色. 默认为: ['#5 ...
- Hbase一:Hbase介绍及特点
转载请注明出处: 1.Google的三篇论文 2003年,Google发布Google File System论文,(GFS)这是一个可扩展的分布 式文件系统,用于大型的.分布式的.对大量数据进行访问 ...