pyqt5 异步事件 收集

pyqt5 异步事件 收集
quamash, 利用Qt事件循环实现 PEP 3156事件循环( asyncio ) api
https://www.kutu66.com//GitHub/article_112085

PyQt5 界面显示无响应的实现
http://www.cppcns.com/jiaoben/python/304010.html

from PyQt5.QtCore import QThread, pyqtSignal
class interface(QMainWindow, Ui_MainWindow):
"""
Class documentation goes here.
"""
def xxxx():
"此处省略无数行代码......"
self.Work()
def Work(self):
self.thread = RunThread()
self.thread.start()
class RunThread(QThread):
# python3,pyqt5与之前的版本有些不一样
# 通过类成员对象定义信号对象
# _signal = pyqtSignal(str)
trigger = pyqtSignal()
def __init__(self, parent=None):
super(RunThread, self).__init__()
def __del__(self):
self.wait()
def run(self):
# 处理你要做的业务逻辑,这里是通过一个回调来处理数据,这里的逻辑处理写自己的方法
dlg.Config['user'] = dlg.check_account['account']
dlg.Config['passwd'] = dlg.check_account['password']
dlg.Config['jk'] = 'http://xxx.com'
if dlg.num != 1:
dlg.operato.config_item(dlg.Config, dlg.wx_update) # 初始化配置
else:
dlg.operato.config_item(dlg.Config, dlg.wx_create) # 初始化配置
self.trigger.emit()

22

...
def downfile(self,file, url):
print("开始下载:", file, url)
try:
r = requests.get(url, stream=True)
with open(file, 'wb') as fd:
for chunk in r.iter_content():
fd.write(chunk)
QApplication.processEvents()
except Exception as e:
print("下载失败了", e)
...

当使用异步协程的时候,pyqt5推荐的是使用quamash

import sys
import asyncio
import time
from PyQt5.QtWidgets import QApplication, QProgressBar
from quamash import QEventLoop, QThreadExecutor
app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop) # NEW must set the event loop
progress = QProgressBar()
progress.setRange(0, 99)
progress.show()
async def master():
await first_50()
with QThreadExecutor(1) as exec:
await loop.run_in_executor(exec, last_50)
# TODO announce completion?
async def first_50():
for i in range(50):
progress.setValue(i)
await asyncio.sleep(.1)
def last_50():
for i in range(50,100):
loop.call_soon_threadsafe(progress.setValue, i)
time.sleep(.1)
with loop: ## context manager calls .close() when loop completes, and releases all resources
loop.run_until_complete(master())
333

PyQt5 事件传递分析和信号解析
https://blog.csdn.net/jeekmary/article/details/88703045?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值