freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

PyQt5框架 | PyQt5-comet轻量级的多线程框架
2020-09-08 12:42:18

简介

PyQt5-comet是一款轻量级的多线程框架。它通过使用pyqtSlot+QMutex+QThread+pyqtSignal+importlib,实现以模块化形式加载提高GUI程序开发速度。优势在于能够帮助研发人员将更多精力放在程序逻辑与回调函数,从而使得GUI在功能上更为强大。

框架模块

下面为框架的目录结构以及模块功能描述:

-PyLib
    Controller.py               控制器文件
    MainUi.py                 GUI设计界面文件
    Module-Test.py               功能模块文件
    ProgramManagement.py              GUI多线程启动文件
    MainUi.ui                 GUI设计界面.ui文件
main.py                                          启动文件

安装教程

首先需要安装PyQt5和PyQt5-tools,使用命令如下:

pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

然后将PyQt5-comet模块下载,如下:

pip install -i https://test.pypi.org/simple/ PyQt5-comet --prefix="我的项目路径"
or
pip install PyQt5-comet --prefix="我的项目路径"

最后将Lib\site-packages\PyLib目录和Lib\site-packages\main.py文件复制到项目根目录即可。

开发教程

Module-Test.py 为自定义模块,可以使用其处理GUI子模块的逻辑。

固定class RunModule和def update用于加载器的调用,剩下逻辑需要按照研发需求设计。

import _thread
import os


class RunModule:
    def __init__(self, tmp_dict):
        self.log = tmp_dict.get("log")
        pass


    def _log(self,threadName):
        print(os.getpid())
        print(self.log)
        print(threadName)


    def run(self):
        _thread.start_new_thread(self._log,("Thread-1",))


    def update(self):
        self.run()
        return self.log

在控制器中加载,name="Module-Test" 是需要加载的模块名称,log="1111111111111111" 是传递的参数。

connect(self._lookTestsLog)是回调函数。

注:函数调用规范 on_组件名称_组件动作() 定义后就可以通过装饰器调用任意组件和动作。

from PyQt5.QtCore import pyqtSlot, QModelIndex, QMutex
from PyQt5.QtWidgets import QMainWindow
from PyLib.MainUi import Ui_Dialog
from PyLib.ProgramManagement import runCmd



class MainWin(QMainWindow, Ui_Dialog):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.q = QMutex()


    #@pyqtSlot(QModelIndex)
    @pyqtSlot()
    def on_pushButton_clicked(self):
        self.q.lock()
        self.runCmd_ = runCmd(name="Module-Test", log="1111111111111111")
        self.runCmd_.cmdsign.connect(self._lookTestsLog)
        self.runCmd_.start()
        self.runCmd_.wait()
        self.q.unlock()


    def _lookTestsLog(self, log):
        self.label.setText(log)
运行时,需要启动main.py。

PyQt5-comet项目地址

https://pypi.org/project/PyQt5-comet/
https://github.com/SkyBlueEternal/PyQt5-comet
# python # python3 # 工具使用 # 框架知识 # Pyqt5
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者