# 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"
}