Skip to main content

QEventManager使用多线程的方式对任务进行处理,qasync的另一个替代

Project description

QEventManager

介绍

QEventManager使用多线程的方式对任务进行处理,qasync的另一个替代

软件架构

依赖于Qt的QThread类,使用多线程的方式对任务进行处理。

安装教程

pip install qeventmanager

使用说明

examples

加载Url图片
# 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())
加载本地图片
# 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())
加载自定义函数
# 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())

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

qeventmanager-1.0.3.tar.gz (18.9 kB view details)

Uploaded Source

File details

Details for the file qeventmanager-1.0.3.tar.gz.

File metadata

  • Download URL: qeventmanager-1.0.3.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for qeventmanager-1.0.3.tar.gz
Algorithm Hash digest
SHA256 d138db00da0caf3319b4480f437c41ccaf89cd53220fa6c9d2116cf6086e394a
MD5 459fe1b858b6133508cbcbc1c3f5e41d
BLAKE2b-256 81435d036a0fb31f47baf789304103c3c79bf6f296dfeb7d7658c4a336a5afe8

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