解决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)
}
}
}

最新文章

  1. ORA-29275: partial multibyte character
  2. Oracle环境变量NLS_LANG
  3. Linux下Apache PHP MYSQL 默认安装路径
  4. spring AOP 是如何一步一步被简化的
  5. 关于饿了么在浏览器标签页失去焦点时网页Title改变的实现方法
  6. Python学习笔记5
  7. bootstrap学习之利用CSS属性pointer-events禁用表单控件
  8. 浅析Entity Framework Core中的并发处理
  9. Android开发之漫漫长途 XIV——RecyclerView
  10. .NET之Dapper框架运用
  11. node.js—Buffer类(二进制数据处理模块)
  12. 第十五节,卷积神经网络之AlexNet网络详解(五)
  13. Arduino IDE for ESP8266 项目(2)wifi扫描
  14. sqlserver,杀掉死锁的进程
  15. 使用Ant编译和构建项目指南
  16. day7面向对象--反射
  17. 使用 Eclipse 远程调试 Java 应用程序
  18. Java连接池
  19. [linux]codeblocks开发mysql配置
  20. BZOJ2938 POI2000病毒

热门文章

  1. JVM是如何解决跨代引用问题的?
  2. IO多路复用完全解析
  3. 在线程里使用线程外的变量为什么一定要是final类型
  4. Kubernetes(k8s)密码管理:Secret
  5. 使用GetDIBits()获取Windows位图数据的标准用法,解决内存、堆栈报错问题
  6. .net NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022
  7. Vue3 组件之间的数据传递
  8. 什么是MES(Manufacturing Execution System)
  9. sqlmap 简单使用
  10. 「CEOI2019」魔法树