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中定义一个信号,这里的信号 ...
随机推荐
- Flutter2.X学习之路--调试页面布局好用的办法
Flutter里有个很好用的东西,可以方便我们来进行页面组件的布局调试,话不多说,上代码 1.找到main.dart引入rendering.dart import 'package:flutter/r ...
- WPF中使用WebView2控件
目录 WebView2简介 概述 优势 支持的运行时平台 进程模型 基本使用 安装WebView2运行时 安装WebView2Sdk 打开一个网页 导航事件 打开一个网页的过程 更改url的过程 空u ...
- Solon2 开发之插件,二、插件扩展机制(Spi)
插件扩展机制,是基于 "插件" + "配置申明" 实现的解耦的扩展机制(类似 Spring Factories.Java Spi):简单.弹性.自由.它的核心作 ...
- 视觉十四讲:第七讲_3D-3D:ICP估计姿态
1.ICP 假设有一组配对好的3D点, \(P={P_{1}, ..., P_{N}}\) , \(P^{'}={P_{1}^{'}, ..., P_{N}^{'}}\). 有一个欧式变换R,t,使得 ...
- Vue3 企业级优雅实战 - 组件库框架 - 12 发布开源组件库
前面使用了 11 篇文章分享基于 vue3 .Monorepo 的组件库工程完整四件套(组件库.文档.example.cli)的开发.构建及组件库的发布.本文属于这 11 篇文章的扩展 -- 如何发布 ...
- navicat无法连接linux内的防火墙
解决方法:开放mysql的端口(3306).然后重启防火墙.或者直接关闭防火墙.具体代码如下: firewall-cmd --zone=public --add-port=3306/tcp --per ...
- Cesium点击改变entity/primitives颜色与恢复原色(三)
2023-01-08 建筑物是primitives,两个娃娃是entity 加载娃娃代码: //粉色 var entity6 = viewer.entities.add({ id:6, positio ...
- NOIP2021游记总结
\(\text{Day-1}\) 惨遭遣返······ 这真是伟大的啊!! \(\text{Day1}\) \(day\) 几好像没有意义,反正只有一天 \(\text{T1}\) 极致 \(H_2O ...
- log 函数
什么是对数 对数用 log 符号来表示.根据底数的不同,log 可以变换成 lg.ln.lg 是以 10 为底的对数,ln 是以 e 为底的对数. logax=y,是一个以 a 为底,x 为真数的对数 ...
- SpringMVC基础源码分析(一)
实现Controller的三种方式分析 每种实现的方式对应的HanderAdapter都不同. 实现Controller接口 该接口对应的HanderAdapter为SimpleControllerH ...