Skip to main content

Python library for using asyncio in Qt-based applications

Project description

qasync

Maintenance PyPI PyPI - License PyPI - Python Version PyPI - Download GitHub Workflow Status

Introduction

qasync allows coroutines to be used in PyQt/PySide applications by providing an implementation of the PEP 3156 event loop.

With qasync, you can use asyncio functionalities directly inside Qt app's event loop, in the main thread. Using async functions for Python tasks can be much easier and cleaner than using threading.Thread or QThread.

If you need some CPU-intensive tasks to be executed in parallel, qasync also got that covered, providing QEventLoop.run_in_executor which is functionally identical to that of asyncio. By default QThreadExecutor is used, but any class implementing the concurrent.futures.Executor interface will do the job.

Basic Example

import asyncio
import sys

from PySide6.QtWidgets import QVBoxLayout, QWidget

from qasync import QApplication, QEventLoop


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.setLayout(QVBoxLayout())
        self.lbl_status = QLabel("Idle", self)
        self.layout().addWidget(self.lbl_status)

    @asyncClose
    async def closeEvent(self, event):
        pass

    @asyncSlot()
    async def onMyEvent(self):
        pass


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

    app_close_event = asyncio.Event()
    app.aboutToQuit.connect(app_close_event.set)

    main_window = MainWindow()
    main_window.show()

    # for 3.11 or older use qasync.run instead of asyncio.run
    # qasync.run(app_close_event.wait())
    asyncio.run(app_close_event.wait(), loop_factory=QEventLoop)

More detailed examples can be found here.

The Future of qasync

qasync is a fork of asyncqt, which is a fork of quamash. qasync was created because those are no longer maintained. May it live longer than its predecessors.

qasync will continue to be maintained, and will still be accepting pull requests.

Requirements

  • Python >=3.8, <3.14
  • PyQt5/PyQt6 or PySide2/PySide6

qasync is tested on Ubuntu, Windows and MacOS.

If you need Python 3.6 or 3.7 support, use the v0.25.0 tag/release.

Installation

To install qasync, use pip:

pip install qasync

License

You may use, modify and redistribute this software under the terms of the BSD License. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qasync-0.28.0.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qasync-0.28.0-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file qasync-0.28.0.tar.gz.

File metadata

  • Download URL: qasync-0.28.0.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.3

File hashes

Hashes for qasync-0.28.0.tar.gz
Algorithm Hash digest
SHA256 6f7f1f18971f59cb259b107218269ba56e3ad475ec456e54714b426a6e30b71d
MD5 456a269c14576094ad8e2e7f1bb1948f
BLAKE2b-256 ecb25be08597dbbf331edb69478eae2f8dd511834cebf56a183b442e7437f8e0

See more details on using hashes here.

File details

Details for the file qasync-0.28.0-py3-none-any.whl.

File metadata

  • Download URL: qasync-0.28.0-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.3

File hashes

Hashes for qasync-0.28.0-py3-none-any.whl
Algorithm Hash digest
SHA256 21faba8d047c717008378f5ac29ea58c32a8128528629e4afd57c59b768dba0f
MD5 29322ff3010e98d4e5a11e8799f3d6ac
BLAKE2b-256 e5840ce4cd946f6e958428c87d5accac35df70f81607e45ba4919947d0762d63

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page