python和PyQt5中的Quamash QventLoop“RuntimeError:没有运行事件循环”错误
Posted
技术标签:
【中文标题】python和PyQt5中的Quamash QventLoop“RuntimeError:没有运行事件循环”错误【英文标题】:Quamash QventLoop "RuntimeError: no running event loop" error in python and PyQt5 【发布时间】:2020-09-03 14:51:36 【问题描述】:我似乎没有找到解决此错误的正确方法。该程序不断给出“RuntimeError:没有正在运行的事件循环”。为什么事件循环没有运行?
import sys
import asyncio
import time
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QMessageBox
from quamash import QEventLoop, QThreadExecutor
class QuamashTrial(QWidget):
def __init__(self):
super(QuamashTrial, self).__init__()
self.initialize_widgets()
loop.run_until_complete(self.master())
QMessageBox.information(self, " ", 'It is done.')
def initialize_widgets(self):
vbox = QVBoxLayout()
self.progress = QProgressBar()
self.progress.setRange(0, 99)
self.progress.show()
self.setLayout(vbox)
@asyncio.coroutine
def master(self):
yield from self.first_50()
with QThreadExecutor(1) as exec:
yield from loop.run_in_executor(exec, self.last_50)
@asyncio.coroutine
def first_50(self):
for i in range(50):
self.progress.setValue(i)
yield from asyncio.sleep(.05)
def last_50(self):
for i in range(50,100):
loop.call_soon_threadsafe(self.progress.setValue, i)
time.sleep(.05)
if __name__ == "__main__":
app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
with loop:
q = QuamashTrial()
q.show()
loop.run_forever()
这是用于学习此概念的在线示例之一。它似乎适用于其他学生程序员,但对我来说,它给了我上面突出显示的错误。
【问题讨论】:
【参考方案1】:自 2018 年 7 月以来,Quamash 一直没有活动,因此它有许多错误尚未解决,由于这种不活动,诸如 qasync
(python -m pip install qasync
) 和 asyncqt
(python -m pip install asyncqt
) 的 fork 已经已创建,因此建议您使用其中一个库,为此它仅更改为:
from qasync import QEventLoop, QThreadExecutor
或
from asyncqt import QEventLoop, QThreadExecutor
【讨论】:
在我进行更改后,现在程序可以正常工作了。以上是关于python和PyQt5中的Quamash QventLoop“RuntimeError:没有运行事件循环”错误的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.5,单独窗口中的 pyqt5 进度条 gui
python/Pyqt5 - 如何在使用 ast 和获取 ValueError 时避免 eval:attemt 中的格式错误的字符串以提高代码安全性
PyQt5 Python:如何通过 MySQL 查询结果中的单个数据行