解决python与QML的通信问题:

  1. QML中直接调用python函数
  2. 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互相通信的更多相关文章

  1. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  2. python - socket通信笔记

    参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket ...

  3. Python Socket通信黏包问题分析及解决方法

    参考:http://www.cnblogs.com/Eva-J/articles/8244551.html#_label5 1.黏包的表现(以客户端远程操作服务端命令为例) 注:只有在TCP协议通信的 ...

  4. Python Socket通信例子

    一.TCP 通信 服务端 #!/usr/bin/env python # -*- coding: utf-8 -*- # server_tcp.py import socket so = socket ...

  5. Python 串口通信 GUI 开发

    在项目中遇到树莓派串口通信问题.由于本人一直从事.net 开发,希望将树莓派系统换成Win10 IOT版.但是在测试过程中出现无法找到串口的问题.最终也没有解决.最终按照领导要求,linux (了解不 ...

  6. Python TCP通信网络编程

    最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一 ...

  7. python http通信实现

    http协议通信需要httpServer和httpClient. 在python中 -- httpServer的实现类是server.py文件,要跟实现tcp,udp Server的文件sockets ...

  8. Python socket通信之FTP

    Python中利用socket进行server端和client端通信是网络编程的基础,是最简单的传输范例. (懂网络的请自动跳过这一部分) 首先,要想通信,必须建立连接,建立连接的过程,需要clien ...

  9. python多进程通信实例分析

    操作系统会为每一个创建的进程分配一个独立的地址空间,不同进程的地址空间是完全隔离的,因此如果不加其他的措施,他们完全感觉不到彼此的存在.那么进程之间怎么进行通信?他们之间的关联是怎样的?实现原理是什么 ...

  10. QML使用Python的函数

    有2种方法: 一. QML中定义一个信号,连接Python里的函数: 这里的函数不用特意指明为槽函数,普通函数即可. QML的信号连接Python的函数 QML:首先在QML中定义一个信号,这里的信号 ...

随机推荐

  1. continue跳過循環(skippaart程序),接受設定的合法分數來進行平均分求值,并展現最高分,最低分

    1 #include<stdio.h> 2 int main() 3 { 4 const float MIN = 0.0f; //分數下限是0分 5 const float MAX = 1 ...

  2. python生成自动化测试报告并发送到指定邮箱

    #-*-coding:utf-8 -*- import HTMLTestRunner import unittest import time import sys import os import s ...

  3. Flex布局专题

    Flex布局专题 参照 https://www.runoob.com/w3cnote/flex-grammar.html 下面是自己看代码的一下 小结,和认识,加笔记,加原文 认识容器 flex布局需 ...

  4. 关于我在学习LFU的时候,在开源项目捡了个漏这件事。

    你好呀,我是歪歪. 这篇文章带大家盘一下 LFU 这个玩意. 为什么突然想起聊聊这个东西呢,因为前段时间有个读者给我扔过来一个链接: 我一看,好家伙,这不是我亲爱的老朋友,Dubbo 同学嘛. 点进去 ...

  5. javaEE(多线程、线程通信、线程安全、线程池、线程池工具)

    多线程 多线程的创建 Thread类的方法 线程安全.线程同步 线程通信.线程池 定时器.线程状态.. Thread类 java是通过java.lang.Thread类来代表线程的 按照面向对象的思想 ...

  6. 【KAWAKO】从mac上定时将腾讯云的数据备份到本地

    目录 前言 需求 宝塔面板 备份网站 备份数据库 mac端 创建工程文件夹 rua.py rua stdout plist Reference 前言 不信任一切云端平台,把数据牢牢握在自己手中才是最安 ...

  7. 【KAWAKO】python查看内存空间占用情况

    目录 查看变量的内存占用 查看运行内存占用 查看变量的内存占用 import sys c = 1145.114 print(sys.getsizeof(c)) 查看运行内存占用 import psut ...

  8. JZOJ 1494. 密码

    留个高精度的模板 \(Code\) #include<cstdio> #include<cstring> using namespace std; int n , a[5005 ...

  9. SQL 注入之:SQL Server 数据库

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. SQ ...

  10. jsHtml解码

    //将HTML代码转换为文本 function HTMLDecode(text) { var temp = document.createElement("div"); temp. ...