当前位置: 首页 > news >正文

pyside6与协程

 

目录

一、常见错误 

错误一、使用协程函数作为槽函数。

错误二、在Qt循环中创建新的loop

二、解决方法: 

①安装库qasync

②修改Qt入口

③异步槽函数

④异步函数

⑤整体示例 


一、常见错误 

错误一、使用协程函数作为槽函数。

这样是肯定是不行,协程函数一定要跑在loop中,这里没有loop直接跑肯定会失败。

错误二、在Qt循环中创建新的loop

主线程通常已经被 Qt 的事件循环占用,因此不应该再创建新的异步事件循环。

 

二、解决方法: 

Qt 和 asyncio 的事件循环可以共存,但需要一些额外的设置。你可以使用 qasync 库来简化这个过程。 

①安装库qasync
pip install qasync
②修改Qt入口

异步槽函数
@asyncSlot()

异步函数
asyncio.ensure_future()

 

⑤整体示例 
import sys
import asyncio
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
from qasync import QEventLoop, asyncSlotclass MyWindow(QWidget):def __init__(self, parent=None):super(MyWindow, self).__init__(parent)# 设置垂直布局self.setLayout(QVBoxLayout())# 创建组件self.button = QPushButton('点击')# 信号连接槽函数self.button.clicked.connect(self.btn_event)# 加入布局self.layout().addWidget(self.button)# 启动异步初始化任务asyncio.ensure_future(self.init_ui())@asyncSlot()async def btn_event(self):print(123)async def init_ui(self):print(456)if __name__ == '__main__':# 创建主循环app = QApplication(sys.argv)# 创建异步事件循环loop = QEventLoop(app)asyncio.set_event_loop(loop)# 创建窗口myWindow = MyWindow()# 显示窗口myWindow.show()# 运行事件循环loop.run_forever()


http://www.mrgr.cn/news/37913.html

相关文章:

  • 对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击
  • 你的下一台手机会是眼镜吗?RTE 大会与你一同寻找下一代计算平台丨「空间计算和新硬件」论坛报名
  • c++学习笔记(47)
  • 国内AI大模型,这篇文章说透了
  • 探探Java与python中的闭包
  • 【编程小白必看】MySQL 日期类型转换与判断操作秘籍一文全掌握
  • 基于STM32的智能灌溉系统
  • 数论——数数(找质因数个数),三位出题人(组合数学,快速幂)
  • 掌握AI提示词的艺术:应用、防护与成为提示词专家的策略
  • Qt5 常见宏定义 记录
  • Generic-eUICC-Test-Profile-for-Device-Testing-Public
  • 深入浅出CSS盒子模型
  • 什么是数据倾斜
  • 3D Gaussian Splatting 学习笔记
  • 学生党有福了!分享5个免费的AI论文生成工具
  • 六款外贸财务软件对比,年度最佳选择
  • 跟我学C++中级篇——if条件语句与switch比较
  • 2024年在线音频剪辑工具推荐。这4个你都知道哪些?
  • 小程序兼容问题
  • 华为苹果黄牛崩溃背后,是悄然改变的消费电子市场