基于PyQt5制作Excel数据分组汇总器

 更新时间:2022年01月13日 08:32:32   作者:Python集中营  
这篇文章主要介绍了基于PyQt5制作的一个小工具:Excel数据分组汇总器。文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起试一试

在写数据汇总分组工具之前梳理一下需求,要求一:能够将excel的数据展示到列表中。要求二:能够支持按列汇总数据,并且多列分组汇总。要求三:能够预览分组汇总以后的数据,最后将分好组汇总的数据保存到新的excel数据文件中。

主要使用到第三方python模块有下面这些,和前面几个 PyQt5 应用不同的是这次增加了一个样式模块 qdarkstyle ,通过最后将这个模块直接加入到 QApplication 中就可以显示成黑色酷酷的应用了。这个样式我个人是比较喜欢的...

'''应用操作库'''
import sys
import os

'''应用样式库'''
from qdarkstyle import load_stylesheet_pyqt5

'''UI界面库'''
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

'''数据提取库'''
import pandas as pd

编写 UI 界面组件布局,UI 布局函数 init_ui()。init_ui() 的函数整体内容都贴在下面这里,大佬们可以根据自己的需要随意发挥。

  def init_ui(self):
        # 标题、图标设置
        self.setWindowTitle('Excel数据汇总工具   公众号:[Python 集中营]')
        self.setWindowIcon(QIcon(':/data_sum.ico'))

        # 初始化水平布局
        hbox = QHBoxLayout()

        # 初始化栅格布局
        grid = QGridLayout()

        self.data_source_text = QLineEdit()
        self.data_source_text.setReadOnly(True)

        self.data_source_btn = QPushButton()
        self.data_source_btn.setText('数据')
        self.data_source_btn.clicked.connect(self.data_source_btn_click)

        self.data_group_column = QLabel()
        self.data_group_column.setText('设置分组列')

        self.data_group_column_text = QLineEdit()
        self.data_group_column_text.setPlaceholderText('列名1,列名2...')

        self.save_dir_text = QLineEdit()
        self.save_dir_text.setReadOnly(True)

        self.save_dir_btn = QPushButton()
        self.save_dir_btn.setText('路径')
        self.save_dir_btn.clicked.connect(self.save_dir_btn_click)

        self.view_data_btn = QPushButton()
        self.view_data_btn.setText('预览数据')
        self.view_data_btn.clicked.connect(self.view_data_btn_click)

        self.save_data_btn = QPushButton()
        self.save_data_btn.setText('保存')
        self.save_data_btn.clicked.connect(self.save_data_btn_click)

        grid.addWidget(self.data_source_text, 0, 0, 1, 2)
        grid.addWidget(self.data_source_btn, 0, 2, 1, 1)
        grid.addWidget(self.data_group_column, 1, 0, 1, 1)
        grid.addWidget(self.data_group_column_text, 1, 1, 1, 2)

        grid.addWidget(self.save_dir_text, 2, 0, 1, 2)
        grid.addWidget(self.save_dir_btn, 2, 2, 1, 1)
        grid.addWidget(self.view_data_btn, 3, 0, 1, 2)
        grid.addWidget(self.save_data_btn, 3, 2, 1, 1)

        self.table_view = QTableView()
        self.table_view.setFixedWidth(500)
        self.table_view.setFixedHeight(100)

        hbox.addWidget(self.table_view)
        hbox.addLayout(grid)

        self.setLayout(hbox)

槽函数总共使用了四个,分别是下面这些。

save_data_btn_click:将分组汇总后的 DataFrame 数据直接保存。

data_source_btn_click:用来加载需要分组汇总的 excel 文件的,并将加载出来的 DataFrame 数据直接显示到 QTableView 的组件上面,这样可以实时的看见加载进来的原始数据。

save_dir_btn_click:点击选择存储路径时触发的槽函数,用来调起 QFileDialog 来选择文件路径。

view_data_btn_click:调起预览分组汇总后的数据,将分组后的数据显示到窗口上。

槽函数 data_source_btn_click,加载 excel 源数据。

    def data_source_btn_click(self):
        xlsx_file = QFileDialog.getOpenFileName(self, '选择文件', self.cwd, 'Excel File(*.xlsx)')
        self.data_source_text.setText(xlsx_file[0])
        self.data_frame = pd.read_excel(self.data_source_text.text().strip())
        print(self.data_frame)
        model = TableModelView(self.data_frame)
        self.table_view.setModel(model)

槽函数 save_data_btn_click,保存最终的 excel 数据。

    def save_data_btn_click(self):
        dir = self.save_dir_text.text().strip()
        self.data_frame_group.to_excel(dir + 'group_data.xlsx',sheet_name='数据信息汇总')

槽函数 view_data_btn_click,预览分组汇总的数据。

    def view_data_btn_click(self):
        columns = self.data_group_column_text.text().strip()
        column_list = []
        if columns != '':
            column_list = columns.split(',')
        self.data_frame_group = self.data_frame.groupby(column_list, as_index=False).sum()
        print(self.data_frame_group)
        model = TableModelView(self.data_frame_group)
        self.table_view.setModel(model)

槽函数 save_dir_btn_click,存储文件选择。

    def save_dir_btn_click(self):
        save_path = QFileDialog.getExistingDirectory(self, '选择文件夹', self.cwd)
        self.save_dir_text.setText(save_path + '/')

最后,在主要代码块中展示列表数据时时使用了一个 QTableView 组件自定义的模型 TableModelView。

到此这篇关于基于PyQt5制作Excel数据分组汇总器的文章就介绍到这了,更多相关PyQt5 Excel数据分组汇总器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中yield的用法详解——最简单,最清晰的解释

    python中yield的用法详解——最简单,最清晰的解释

    这篇文章主要介绍了python中yield的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 解决pytorch rnn 变长输入序列的问题

    解决pytorch rnn 变长输入序列的问题

    这篇文章主要介绍了解决pytorch rnn 变长输入序列的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python3如何跳过第一行读取文件

    Python3如何跳过第一行读取文件

    这篇文章主要介绍了Python3如何跳过第一行读取文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • python生成n个元素的全组合方法

    python生成n个元素的全组合方法

    今天小编就为大家分享一篇python生成n个元素的全组合方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python之split函数的深入理解

    Python之split函数的深入理解

    split函数主要应用场景是Python对字符串的处理中(数据分析,数据处理),以及计算机二级考试的常考基础知识点,这篇文章主要介绍了Python之split函数的详解,需要的朋友可以参考下
    2023-02-02
  • python正则表达式re.sub各个参数的超详细讲解

    python正则表达式re.sub各个参数的超详细讲解

    Python 的 re 模块提供了re.sub用于替换字符串中的匹配项,下面这篇文章主要给大家介绍了关于python正则表达式re.sub各个参数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 比较详细Python正则表达式操作指南(re使用)

    比较详细Python正则表达式操作指南(re使用)

    Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再使用 regex 模块,当然偶尔你还是可能在老代码里发现其踪影
    2008-09-09
  • python matplotlib中的subplot函数使用详解

    python matplotlib中的subplot函数使用详解

    今天小编就为大家分享一篇python matplotlib中的subplot函数使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python算法绘制特洛伊小行星群实现示例

    Python算法绘制特洛伊小行星群实现示例

    这篇文章主要介绍了Python算法绘制特洛伊小行星群实现示例,这个小示例完成后非常的有意思也会使你在Python学习的道路上感到一丝丝小成就
    2021-10-10
  • python实现在一个画布上画多个子图

    python实现在一个画布上画多个子图

    今天小编就为大家分享一篇python实现在一个画布上画多个子图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01

最新评论