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中定义一个信号,这里的信号 ...
随机推荐
- webpack配置less以及js中引入的图片问题
1.问题重现 当我做了这个配置以后,发现less里的图片可以正常展现到页面,但是js里的图片以及其他文件都不能正常展现,都报404 原始配置如下: // 如果有額外的.babelrc配置的話就可以使用 ...
- 第一个C程序
写C代码 创建工作区 创建工程 创建文件(.c源文件..h头文件) main函数是程序执行的入口,有且只有一个 函数printf(print function打印函数)[库函数-C语言本身提供给我们使 ...
- 借助Radamsa变异数据(初探)
Radamsa 介绍 Radamsa是一款测试用例生成器,通常用来测试程序对格式错误和潜在恶意输入的承受能力(对程序进行模糊测试).它通过你的输入来返回变异后的数据.它的主要卖点是,它已经在真正重要的 ...
- Consumer接口-Consumer接口的默认方法andThen
Consumer接口 java.util.function.Consumer<T〉接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定. 抽象方法:a ...
- Node.js学习笔记----day05(MongonDB详情)
认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.es6中的find() 方法的原理 EcmaScript 6 对数组新增了很多方法 比如,find find 接收一个方法作为参数,方法内 ...
- 线程基础知识10-volatile
1 简介 Volatile保证了可见性和有序性,没有保证原子性. 1.1 保证可见性简介 可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改.volatile变量做到了这一点. ...
- 国内怎么玩 ChatGPT
ChatGPT去年已经在互联网技术圈里已经火了一把,现在似乎已经出圈,各行各业都在讨论,可以预见,ChatGPT是继互联网后的又一大技术革命. 如何才能体验ChatGPT呢?很多人卡在账号注册这一步, ...
- 学习Java Day7
今天学习了if语句和C/C++基本无差异,也再次练了一下Java的输入
- Archiver Appliance bug report(问题已解决,见文末)
本来想发到EPICS mailist里问的,可是发了两次给弹回来,不方便的等不及了,就在这问吧,谁知道怎么解决麻烦一定指导一下. ########################## Hi ALL: ...
- vue3语法糖+ts组件传值
在开发中有些功能是通用的,而且逻辑大致相同,像这种东西可以封成一个组件,比较常用的就是函数封装,组件封装,组件封装是需要引入到页面使用的,所以通常它会有一些自己的方法,父子组件可以通过一些值来进行关联 ...