关于python:PyQt5-小工具Excel数据分组汇总器

8次阅读

共计 3814 个字符,预计需要花费 10 分钟才能阅读完成。

在写数据汇总分组工具之前梳理一下需要,要求一:可能将 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,因为篇幅问题这里就不分享了,大家能够去公众号下载源码。

【福利】公众号内回复 “Excel 数据分组汇总器 ”,获取残缺源代码。

【往期精选】

● 异样:存储 MYSQL 本义数据保证数据存储的准确性 …

● 做一个小闹钟,按布局做事 …

● 应用 pyqt5 的日期控件做一个小日历不便查看 …

● 将几万张图片合成一张图片,制作一个超赞的马赛克图!

● 小工具批量将 mp3 音频格式转换为 wav 格局

● 不必 H5,间接应用 pywebio 模块实现网页

● python 回调函数能做什么?

● 解决 pyinstaller 打包过程中内部资源无奈加载的问题 …

● 如何在控制台实现一个数据管理系统(包含 MYSQL 数据库的增删改查)

● pyqt5 做了一个二维码生成器,已打包成 exe 可执行程序 …

● 自制文档格局转换器,反对 .txt/.xlsx/.csv 格局转换 …

● PyPDF2 如何实现依照 PDF 页码提取后并另存为 PDF 格式文件?

● PyQt5 GUI:百度图片下载器(文末附源码)

● 浪漫的 turtle,送给程序员本人的圣诞树!

正文完
 0