qasync


Nameqasync JSON
Version 0.27.1 PyPI version JSON
download
home_pagehttps://github.com/CabbageDevelopment/qasync
SummaryPython library for using asyncio in Qt-based applications
upload_time2023-11-19 14:19:55
maintainerAlex March
docs_urlNone
authorArve Knudsen
requires_python>=3.8,<4.0
licenseBSD-2-Clause
keywords qt asncio
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # qasync

[![Maintenance](https://img.shields.io/maintenance/yes/2023)](https://pypi.org/project/qasync)
[![PyPI](https://img.shields.io/pypi/v/qasync)](https://pypi.org/project/qasync)
[![PyPI - License](https://img.shields.io/pypi/l/qasync)](/LICENSE)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/qasync)](https://pypi.org/project/qasync)
[![PyPI - Download](https://img.shields.io/pypi/dm/qasync)](https://pypi.org/project/qasync)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/CabbageDevelopment/qasync/main.yml)](https://github.com/CabbageDevelopment/qasync/actions/workflows/main.yml)

## 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`.

### Basic Example

```python
import sys
import asyncio

from qasync import QEventLoop, QApplication
from PySide6.QtWidgets import QWidget, QVBoxLayout

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)

    event_loop = QEventLoop(app)
    asyncio.set_event_loop(event_loop)

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

    main_window = MainWindow()
    main_window.show()

    with event_loop:
        event_loop.run_until_complete(app_close_event.wait())
```

More detailed examples can be found [here](https://github.com/CabbageDevelopment/qasync/tree/master/examples).

### The Future of `qasync`

`qasync` is a fork of [asyncqt](https://github.com/gmarull/asyncqt), which is a fork of [quamash](https://github.com/harvimt/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
- 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](https://github.com/CabbageDevelopment/qasync/releases/tag/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](http://opensource.org/licenses/BSD-2-Clause). See [LICENSE](/LICENSE).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/CabbageDevelopment/qasync",
    "name": "qasync",
    "maintainer": "Alex March",
    "docs_url": null,
    "requires_python": ">=3.8,<4.0",
    "maintainer_email": "alexmach@fastmail.com",
    "keywords": "Qt,asncio",
    "author": "Arve Knudsen",
    "author_email": "arve.knudsen@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/1c/e0/7c7c973f52e1765d6ddfc41e9272294f65d5d52b8f5f5eae92adf411ad46/qasync-0.27.1.tar.gz",
    "platform": null,
    "description": "# qasync\n\n[![Maintenance](https://img.shields.io/maintenance/yes/2023)](https://pypi.org/project/qasync)\n[![PyPI](https://img.shields.io/pypi/v/qasync)](https://pypi.org/project/qasync)\n[![PyPI - License](https://img.shields.io/pypi/l/qasync)](/LICENSE)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/qasync)](https://pypi.org/project/qasync)\n[![PyPI - Download](https://img.shields.io/pypi/dm/qasync)](https://pypi.org/project/qasync)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/CabbageDevelopment/qasync/main.yml)](https://github.com/CabbageDevelopment/qasync/actions/workflows/main.yml)\n\n## Introduction\n\n`qasync` allows coroutines to be used in PyQt/PySide applications by providing an implementation of the `PEP 3156` event loop.\n\nWith `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`.\n\nIf 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`.\n\n### Basic Example\n\n```python\nimport sys\nimport asyncio\n\nfrom qasync import QEventLoop, QApplication\nfrom PySide6.QtWidgets import QWidget, QVBoxLayout\n\nclass MainWindow(QWidget):\n    def __init__(self):\n        super().__init__()\n\n        self.setLayout(QVBoxLayout())\n        self.lbl_status = QLabel(\"Idle\", self)\n        self.layout().addWidget(self.lbl_status)\n\n    @asyncClose\n    async def closeEvent(self, event):\n        pass\n\n    @asyncSlot()\n    async def onMyEvent(self):\n        pass\n\n\nif __name__ == \"__main__\":\n    app = QApplication(sys.argv)\n\n    event_loop = QEventLoop(app)\n    asyncio.set_event_loop(event_loop)\n\n    app_close_event = asyncio.Event()\n    app.aboutToQuit.connect(app_close_event.set)\n\n    main_window = MainWindow()\n    main_window.show()\n\n    with event_loop:\n        event_loop.run_until_complete(app_close_event.wait())\n```\n\nMore detailed examples can be found [here](https://github.com/CabbageDevelopment/qasync/tree/master/examples).\n\n### The Future of `qasync`\n\n`qasync` is a fork of [asyncqt](https://github.com/gmarull/asyncqt), which is a fork of [quamash](https://github.com/harvimt/quamash). `qasync` was created because those are no longer maintained. May it live longer than its predecessors.\n\n**`qasync` will continue to be maintained, and will still be accepting pull requests.**\n\n## Requirements\n\n- Python >= 3.8\n- PyQt5/PyQt6 or PySide2/PySide6\n\n`qasync` is tested on Ubuntu, Windows and MacOS.\n\nIf you need Python 3.6 or 3.7 support, use the [v0.25.0](https://github.com/CabbageDevelopment/qasync/releases/tag/v0.25.0) tag/release.\n\n## Installation\n\nTo install `qasync`, use `pip`:\n\n```\npip install qasync\n```\n\n## License\n\nYou may use, modify and redistribute this software under the terms of the [BSD License](http://opensource.org/licenses/BSD-2-Clause). See [LICENSE](/LICENSE).\n",
    "bugtrack_url": null,
    "license": "BSD-2-Clause",
    "summary": "Python library for using asyncio in Qt-based applications",
    "version": "0.27.1",
    "project_urls": {
        "Homepage": "https://github.com/CabbageDevelopment/qasync",
        "Repository": "https://github.com/CabbageDevelopment/qasync"
    },
    "split_keywords": [
        "qt",
        "asncio"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5106bc628aa2981bcfd452a08ee435b812fd3eee4ada8acb8a76c4a09d1a5a77",
                "md5": "1b4b5dd5efa9ecd06f368ff2c190cefb",
                "sha256": "5d57335723bc7d9b328dadd8cb2ed7978640e4bf2da184889ce50ee3ad2602c7"
            },
            "downloads": -1,
            "filename": "qasync-0.27.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1b4b5dd5efa9ecd06f368ff2c190cefb",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4.0",
            "size": 14866,
            "upload_time": "2023-11-19T14:19:54",
            "upload_time_iso_8601": "2023-11-19T14:19:54.345836Z",
            "url": "https://files.pythonhosted.org/packages/51/06/bc628aa2981bcfd452a08ee435b812fd3eee4ada8acb8a76c4a09d1a5a77/qasync-0.27.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1ce07c7c973f52e1765d6ddfc41e9272294f65d5d52b8f5f5eae92adf411ad46",
                "md5": "a24350244114dac9f6d61eb0d1b903c8",
                "sha256": "8dc768fd1ee5de1044c7c305eccf2d39d24d87803ea71189d4024fb475f4985f"
            },
            "downloads": -1,
            "filename": "qasync-0.27.1.tar.gz",
            "has_sig": false,
            "md5_digest": "a24350244114dac9f6d61eb0d1b903c8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4.0",
            "size": 14287,
            "upload_time": "2023-11-19T14:19:55",
            "upload_time_iso_8601": "2023-11-19T14:19:55.535467Z",
            "url": "https://files.pythonhosted.org/packages/1c/e0/7c7c973f52e1765d6ddfc41e9272294f65d5d52b8f5f5eae92adf411ad46/qasync-0.27.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-19 14:19:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "CabbageDevelopment",
    "github_project": "qasync",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "qasync"
}
        
Elapsed time: 4.08067s