Skip to content

how to solve RuntimeError when QMessageBox show #174

@3293406747

Description

@3293406747

QMessageBox.information not use await when run asynico task at task1, but it try to enter into task2 so that RuntimeError.
error messasge

任务1开始
任务2开始
任务1运行中
Exception in callback Task.task_wakeup(<Future finished result=None>)
handle: <Handle Task.task_wakeup(<Future finished result=None>)>
Traceback (most recent call last):
  File "lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
RuntimeError: Cannot enter into task <Task pending name='Task-2' coro=<MyWindow.task2() running at demo.py:31> wait_for=<Future finished result=None>> while another task <Task pending name='Task-1' coro=<MyWindow.task1() running at demo.py:26>> is being executed.

python code

import asyncio
import sys

import qasync
from PySide6.QtWidgets import QMainWindow, QMessageBox, QPushButton, QApplication


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(400, 300)
        self.show()
        self.button = QPushButton("按钮", self)
        self.button.clicked.connect(self.create_tasks)
        self.button.show()

    def create_tasks(self):
        """创建任务"""
        asyncio.create_task(self.task1())
        asyncio.create_task(self.task2())

    async def task1(self):
        print("任务1开始")
        await asyncio.sleep(0)
        print("任务1运行中")
        QMessageBox.information(self, "提示", "任务1已经完成")
        print("任务1完成")

    async def task2(self):
        print("任务2开始")
        await asyncio.sleep(1)
        print("任务2完成")

    def closeEvent(self, event):
        super().closeEvent(event)
        for task in asyncio.all_tasks():
            task.cancel()


if __name__ == '__main__':
    app = QApplication(sys.argv)

    loop = qasync.QEventLoop(app)
    asyncio.set_event_loop(loop)

    myWindow = MyWindow()
    myWindow.show()

    try:
        with loop:
            loop.run_forever()
    except KeyboardInterrupt:
        pass
    finally:
        myWindow.close()
        sys.exit(0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions