当前位置: 首页 > news >正文

python_PyQt5开发工具结构基础

写在前面:

考虑已经陆陆续续在平台写了几篇PyQt5开发的小工具,后续还会继续发布新的新工具,这些工具都基于一个基础结构往上构建,这个基础结构是本人自己开发的习惯,在这里把工具的基础结构代码抽取出来,后续要开发新的工具直接复制结构代码,然后就可以直接开发主体。

界面:

1 进度条,基础结构里会有一个线程,耗时的业务在线程中执行

2 主体界面, 在主体位置放置业务相关控件

代码:

import sys
from threading import Thread
from typing import Dict,Any
from PyQt5 import QtCore,QtWidgets,QtGui
from PyQt5.QtCore import Qt
import pyqtgraph as pg
pg.setConfigOption('background','w')
pg.setConfigOption('foreground','k')class BaseMainWidget(QtWidgets.QWidget):signal_excute = QtCore.pyqtSignal(object)def __init__(self):super().__init__()self.thread_caculate: Thread = Noneself.init_data()self.init_ui()self.register_event()self.progress_init()passdef init_data(self):passdef init_ui(self):self.setWindowTitle('PyQt5开发工具结构基础')self.setMinimumWidth(600)self.setMinimumHeight(400)self.caculate_progress = QtWidgets.QProgressBar()self.caculate_status_label = QtWidgets.QLabel()layout_progress = QtWidgets.QHBoxLayout()layout_progress.addWidget(self.caculate_progress)layout_progress.addWidget(self.caculate_status_label)temp_label = QtWidgets.QLabel('PyQt5开发工具结构基础\n这里放置业务内容')temp_label.setAlignment(Qt.AlignCenter)temp_label.setStyleSheet('QLabel{font-size:32px;font-weight:bold;}')layout_one = QtWidgets.QVBoxLayout()layout_one.addStretch(1)layout_one.addWidget(temp_label)layout_one.addStretch(1)layout = QtWidgets.QVBoxLayout()layout.addLayout(layout_progress)layout.addLayout(layout_one)self.setLayout(layout)passdef register_event(self):self.signal_excute.connect(self.process_excute_event)passdef process_excute_event(self,data:Dict):passdef start_caculate_thread(self,mark_str:str,data:Dict[str,Any]):if self.thread_caculate:QtWidgets.QMessageBox.information(self,'提示','线程正在执行任务,请稍后。。。',QtWidgets.QMessageBox.Yes)returnself.thread_caculate = Thread(target=self.running_caculate_thread,args=(mark_str, data,))self.thread_caculate.start()self.progress_busy()passdef running_caculate_thread(self,mark_str:str,data:Dict[str,Any]):passdef progress_init(self) -> None:self.caculate_progress.setValue(0)self.caculate_status_label.setText('无任务')def progress_busy(self) -> None:self.caculate_progress.setRange(0, 0)self.caculate_status_label.setText('正在执行')def progress_finished(self) -> None:self.caculate_progress.setRange(0, 100)self.caculate_progress.setValue(100)self.caculate_status_label.setText('执行完毕')passdef closeEvent(self, a0: QtGui.QCloseEvent) -> None:self.close()passif __name__ == '__main__':QtCore.QCoreApplication.setAttribute(QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)app = QtWidgets.QApplication(sys.argv)main_window = BaseMainWidget()main_window.show()app.exec()pass

http://www.lryc.cn/news/98624.html

相关文章:

  • 【C++】入门基础2
  • Reinforcement Learning with Code 【Chapter 8. Value Funtion Approximation】
  • 常用InnoDB参数介绍
  • 云原生网关部署新范式丨 Higress 发布 1.1 版本,支持脱离 K8s 部署
  • 【通讯录】--C语言
  • 通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的
  • Mysql- 存储引擎
  • vite / nuxt3 项目使用define配置/自定义,可以使用process.env.xxx获取的环境变量
  • 在Linux、Ubuntu中跨平台编译ARM(AARCH64)平台的binutils
  • SpringCloudAlibaba微服务实战系列(五)Sentinel1.8.5+Nacos持久化
  • pytest中conftest的用法以及钩子基本使用
  • 数据结构---顺序栈、链栈
  • 我的MacBook Pro:维护心得与实用技巧
  • Higress非K8S安装
  • QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)
  • hjm家族信托科技研究报告
  • [SQL挖掘机] - 视图相关操作
  • 【Quartus FPGA】EMIF DDR3 读写带宽测试
  • Flutter:flutter_local_notifications——消息推送的学习
  • Spring AOP (面向切面编程)原理与代理模式—实例演示
  • 什么是SCRUM认证体系 ?
  • DoIP学习笔记系列:(二)VN5620 DoIP测试配置实践笔记
  • Grafana - TDEngine搭建数据监测报警系统
  • ES6基础知识二:ES6中数组新增了哪些扩展?
  • 使用CRM分析数据有哪些功能?
  • 大数据课程综合实验案例---课设问题汇总
  • 基于Vue+Element Plus实现表格组件
  • MYSQL 主从复制
  • 网络安全领域关键信息泄露事件引发关注
  • AI 绘画Stable Diffusion 研究(一)sd整合包v4.2 版本安装说明