# QEventManager
#### 介绍
QEventManager使用多线程的方式对任务进行处理,qasync的另一个替代
#### 软件架构
依赖于Qt的QThread类,使用多线程的方式对任务进行处理。
#### 安装教程
```
pip install qeventmanager
```
#### 使用说明
[examples](examples)
##### 加载Url图片
```python
# coding: utf-8
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QImage, QPixmap
from qeventmanager import qevent_manager
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
class Demo(QWidget):
def __init__(self):
super().__init__()
self.verticalLayout = QVBoxLayout(self)
self.pushButton = QPushButton(self)
self.pushButton.setText("Click me")
self.label = QLabel(self)
self.label.setText("Hello, world!")
self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.label.setScaledContents(True)
self.verticalLayout.setAlignment(Qt.AlignmentFlag.AlignTop)
self.verticalLayout.addWidget(self.pushButton)
self.verticalLayout.addWidget(self.label, 1)
self.pushButton.clicked.connect(self.handle_click)
def handle_click(self):
url = 'https://i.loli.net/2018/12/06/5c0867986a2a0.jpg'
qevent_manager.addLoadImageFromUrl(url, slot=self.handle_image, use_pil=False)
def handle_image(self, image: QImage):
image = image.scaledToWidth(self.verticalLayout.geometry().width())
self.label.setPixmap(QPixmap.fromImage(image))
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.resize(1000, 600)
demo.show()
sys.exit(app.exec())
```
##### 加载本地图片
```python
# coding: utf-8
import sys
from PySide6.QtCore import Qt
from PySide6.QtGui import QImage, QPixmap
from qeventmanager import qevent_manager
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
class Demo(QWidget):
def __init__(self):
super().__init__()
self.verticalLayout = QVBoxLayout(self)
self.pushButton = QPushButton(self)
self.pushButton.setText("Click me")
self.label = QLabel(self)
self.label.setText("Hello, world!")
self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.label.setScaledContents(True)
self.verticalLayout.setAlignment(Qt.AlignmentFlag.AlignTop)
self.verticalLayout.addWidget(self.pushButton)
self.verticalLayout.addWidget(self.label, 1)
self.pushButton.clicked.connect(self.handle_click)
def handle_click(self):
url = './img.jpg'
qevent_manager.addLoadImageFromFile(url, slot=self.handle_image, use_pil=False)
def handle_image(self, image: QImage):
image = image.scaledToWidth(self.verticalLayout.geometry().width())
self.label.setPixmap(QPixmap.fromImage(image))
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.resize(1000, 600)
demo.show()
sys.exit(app.exec())
```
##### 加载自定义函数
```python
# coding: utf-8
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
from requests import Response, post
from qeventmanager import qevent_manager
def baidu():
url = 'https://wallpaper.soutushenqi.com/timeStamp?product_id=52&version_code=29106&sign=EB9C805D055305DB83FCAFEA541B9714'
response = post(url)
response.raise_for_status()
response.encoding = 'utf-8'
return response
class Demo(QWidget):
def __init__(self):
super().__init__()
self.verticalLayout = QVBoxLayout(self)
self.pushButton = QPushButton(self)
self.pushButton.setText("Click me")
self.label = QLabel(self)
self.label.setText("Hello, world!")
self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.label.setScaledContents(True)
self.verticalLayout.setAlignment(Qt.AlignmentFlag.AlignTop)
self.verticalLayout.addWidget(self.pushButton)
self.verticalLayout.addWidget(self.label, 1)
self.pushButton.clicked.connect(self.handle_click)
def handle_click(self):
qevent_manager.addTask(baidu, slot=self.handle)
# qevent_manager.addTaskToPool(baidu, slot=self.handle)
def handle(self, response: Response):
self.label.setText(response.text)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.resize(1000, 600)
demo.show()
sys.exit(app.exec())
```
Raw data
{
"_id": null,
"home_page": "https://gitee.com/chiyaun/qevent-manager",
"name": "QEventManager",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "Qt\u4e8b\u4ef6\u5904\u7406",
"author": "\u8d64\u9e22\u4ed9\u4eba",
"author_email": "2640610281@qq.com",
"download_url": "https://files.pythonhosted.org/packages/81/43/5d036a0fb31f47baf789304103c3c79bf6f296dfeb7d7658c4a336a5afe8/qeventmanager-1.0.3.tar.gz",
"platform": "all",
"description": "# QEventManager\r\n\r\n#### \u4ecb\u7ecd\r\n\r\nQEventManager\u4f7f\u7528\u591a\u7ebf\u7a0b\u7684\u65b9\u5f0f\u5bf9\u4efb\u52a1\u8fdb\u884c\u5904\u7406\uff0cqasync\u7684\u53e6\u4e00\u4e2a\u66ff\u4ee3\r\n\r\n#### \u8f6f\u4ef6\u67b6\u6784\r\n\r\n\u4f9d\u8d56\u4e8eQt\u7684QThread\u7c7b\uff0c\u4f7f\u7528\u591a\u7ebf\u7a0b\u7684\u65b9\u5f0f\u5bf9\u4efb\u52a1\u8fdb\u884c\u5904\u7406\u3002\r\n\r\n#### \u5b89\u88c5\u6559\u7a0b\r\n\r\n```\r\npip install qeventmanager\r\n```\r\n\r\n#### \u4f7f\u7528\u8bf4\u660e\r\n[examples](examples)\r\n\r\n##### \u52a0\u8f7dUrl\u56fe\u7247\r\n\r\n```python\r\n# coding: utf-8\r\nimport sys\r\n\r\nfrom PySide6.QtCore import Qt\r\nfrom PySide6.QtGui import QImage, QPixmap\r\n\r\nfrom qeventmanager import qevent_manager\r\n\r\nfrom PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton\r\n\r\n\r\nclass Demo(QWidget):\r\n def __init__(self):\r\n super().__init__()\r\n self.verticalLayout = QVBoxLayout(self)\r\n self.pushButton = QPushButton(self)\r\n self.pushButton.setText(\"Click me\")\r\n\r\n self.label = QLabel(self)\r\n self.label.setText(\"Hello, world!\")\r\n self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)\r\n self.label.setScaledContents(True)\r\n\r\n self.verticalLayout.setAlignment(Qt.AlignmentFlag.AlignTop)\r\n self.verticalLayout.addWidget(self.pushButton)\r\n self.verticalLayout.addWidget(self.label, 1)\r\n\r\n self.pushButton.clicked.connect(self.handle_click)\r\n\r\n def handle_click(self):\r\n url = 'https://i.loli.net/2018/12/06/5c0867986a2a0.jpg'\r\n qevent_manager.addLoadImageFromUrl(url, slot=self.handle_image, use_pil=False)\r\n\r\n def handle_image(self, image: QImage):\r\n image = image.scaledToWidth(self.verticalLayout.geometry().width())\r\n self.label.setPixmap(QPixmap.fromImage(image))\r\n\r\n\r\nif __name__ == '__main__':\r\n app = QApplication(sys.argv)\r\n demo = Demo()\r\n demo.resize(1000, 600)\r\n demo.show()\r\n sys.exit(app.exec())\r\n```\r\n\r\n\r\n##### \u52a0\u8f7d\u672c\u5730\u56fe\u7247\r\n```python\r\n# coding: utf-8\r\nimport sys\r\n\r\nfrom PySide6.QtCore import Qt\r\nfrom PySide6.QtGui import QImage, QPixmap\r\n\r\nfrom qeventmanager import qevent_manager\r\n\r\nfrom PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton\r\n\r\n\r\nclass Demo(QWidget):\r\n def __init__(self):\r\n super().__init__()\r\n self.verticalLayout = QVBoxLayout(self)\r\n self.pushButton = QPushButton(self)\r\n self.pushButton.setText(\"Click me\")\r\n\r\n self.label = QLabel(self)\r\n self.label.setText(\"Hello, world!\")\r\n self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)\r\n self.label.setScaledContents(True)\r\n\r\n self.verticalLayout.setAlignment(Qt.AlignmentFlag.AlignTop)\r\n self.verticalLayout.addWidget(self.pushButton)\r\n self.verticalLayout.addWidget(self.label, 1)\r\n\r\n self.pushButton.clicked.connect(self.handle_click)\r\n\r\n def handle_click(self):\r\n url = './img.jpg'\r\n qevent_manager.addLoadImageFromFile(url, slot=self.handle_image, use_pil=False)\r\n\r\n def handle_image(self, image: QImage):\r\n image = image.scaledToWidth(self.verticalLayout.geometry().width())\r\n self.label.setPixmap(QPixmap.fromImage(image))\r\n\r\n\r\nif __name__ == '__main__':\r\n app = QApplication(sys.argv)\r\n demo = Demo()\r\n demo.resize(1000, 600)\r\n demo.show()\r\n sys.exit(app.exec())\r\n```\r\n\r\n##### \u52a0\u8f7d\u81ea\u5b9a\u4e49\u51fd\u6570\r\n```python\r\n# coding: utf-8\r\nimport sys\r\n\r\nfrom PySide6.QtCore import Qt\r\nfrom PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton\r\nfrom requests import Response, post\r\n\r\nfrom qeventmanager import qevent_manager\r\n\r\n\r\ndef baidu():\r\n url = 'https://wallpaper.soutushenqi.com/timeStamp?product_id=52&version_code=29106&sign=EB9C805D055305DB83FCAFEA541B9714'\r\n response = post(url)\r\n response.raise_for_status()\r\n response.encoding = 'utf-8'\r\n return response\r\n\r\n\r\nclass Demo(QWidget):\r\n def __init__(self):\r\n super().__init__()\r\n self.verticalLayout = QVBoxLayout(self)\r\n self.pushButton = QPushButton(self)\r\n self.pushButton.setText(\"Click me\")\r\n\r\n self.label = QLabel(self)\r\n self.label.setText(\"Hello, world!\")\r\n self.label.setAlignment(Qt.AlignmentFlag.AlignCenter)\r\n self.label.setScaledContents(True)\r\n\r\n self.verticalLayout.setAlignment(Qt.AlignmentFlag.AlignTop)\r\n self.verticalLayout.addWidget(self.pushButton)\r\n self.verticalLayout.addWidget(self.label, 1)\r\n\r\n self.pushButton.clicked.connect(self.handle_click)\r\n\r\n def handle_click(self):\r\n qevent_manager.addTask(baidu, slot=self.handle)\r\n # qevent_manager.addTaskToPool(baidu, slot=self.handle)\r\n\r\n def handle(self, response: Response):\r\n self.label.setText(response.text)\r\n\r\n\r\nif __name__ == '__main__':\r\n app = QApplication(sys.argv)\r\n demo = Demo()\r\n demo.resize(1000, 600)\r\n demo.show()\r\n sys.exit(app.exec())\r\n```\r\n",
"bugtrack_url": null,
"license": null,
"summary": "QEventManager\u4f7f\u7528\u591a\u7ebf\u7a0b\u7684\u65b9\u5f0f\u5bf9\u4efb\u52a1\u8fdb\u884c\u5904\u7406\uff0cqasync\u7684\u53e6\u4e00\u4e2a\u66ff\u4ee3",
"version": "1.0.3",
"project_urls": {
"Bug Tracker": "https://gitee.com/chiyaun/qevent-manager/issues",
"Documentation": "https://gitee.com/chiyaun/qevent-manager/blob/master/README.md",
"Homepage": "https://gitee.com/chiyaun/qevent-manager",
"Project Homepage": "https://gitee.com/chiyaun/qevent-manager",
"Source Code": "https://gitee.com/chiyaun/qevent-manager"
},
"split_keywords": [
"qt\u4e8b\u4ef6\u5904\u7406"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "81435d036a0fb31f47baf789304103c3c79bf6f296dfeb7d7658c4a336a5afe8",
"md5": "459fe1b858b6133508cbcbc1c3f5e41d",
"sha256": "d138db00da0caf3319b4480f437c41ccaf89cd53220fa6c9d2116cf6086e394a"
},
"downloads": -1,
"filename": "qeventmanager-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "459fe1b858b6133508cbcbc1c3f5e41d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 18876,
"upload_time": "2025-09-08T06:17:25",
"upload_time_iso_8601": "2025-09-08T06:17:25.805462Z",
"url": "https://files.pythonhosted.org/packages/81/43/5d036a0fb31f47baf789304103c3c79bf6f296dfeb7d7658c4a336a5afe8/qeventmanager-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-08 06:17:25",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "qeventmanager"
}