这篇文章主要介绍了基于PyQt5制作的一个小工具:Excel数据分组汇总器。文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起试一试
在写数据汇总分组工具之前梳理一下需求,要求一:能够将excel的数据展示到列表中。要求二:能够支持按列汇总数据,并且多列分组汇总。要求三:能够预览分组汇总以后的数据,最后将分好组汇总的数据保存到新的excel数据文件中。

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

  1. '''应用操作库'''
  2. import sys
  3. import os
  4. '''应用样式库'''
  5. from qdarkstyle import load_stylesheet_pyqt5
  6. '''UI界面库'''
  7. from PyQt5.QtWidgets import *
  8. from PyQt5.QtCore import *
  9. from PyQt5.QtGui import *
  10. '''数据提取库'''
  11. import pandas as pd

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

  1. def init_ui(self):
  2. # 标题、图标设置
  3. self.setWindowTitle('Excel数据汇总工具 公众号:[Python 集中营]')
  4. self.setWindowIcon(QIcon(':/data_sum.ico'))
  5. # 初始化水平布局
  6. hbox = QHBoxLayout()
  7. # 初始化栅格布局
  8. grid = QGridLayout()
  9. self.data_source_text = QLineEdit()
  10. self.data_source_text.setReadOnly(True)
  11. self.data_source_btn = QPushButton()
  12. self.data_source_btn.setText('数据')
  13. self.data_source_btn.clicked.connect(self.data_source_btn_click)
  14. self.data_group_column = QLabel()
  15. self.data_group_column.setText('设置分组列')
  16. self.data_group_column_text = QLineEdit()
  17. self.data_group_column_text.setPlaceholderText('列名1,列名2...')
  18. self.save_dir_text = QLineEdit()
  19. self.save_dir_text.setReadOnly(True)
  20. self.save_dir_btn = QPushButton()
  21. self.save_dir_btn.setText('路径')
  22. self.save_dir_btn.clicked.connect(self.save_dir_btn_click)
  23. self.view_data_btn = QPushButton()
  24. self.view_data_btn.setText('预览数据')
  25. self.view_data_btn.clicked.connect(self.view_data_btn_click)
  26. self.save_data_btn = QPushButton()
  27. self.save_data_btn.setText('保存')
  28. self.save_data_btn.clicked.connect(self.save_data_btn_click)
  29. grid.addWidget(self.data_source_text, 0, 0, 1, 2)
  30. grid.addWidget(self.data_source_btn, 0, 2, 1, 1)
  31. grid.addWidget(self.data_group_column, 1, 0, 1, 1)
  32. grid.addWidget(self.data_group_column_text, 1, 1, 1, 2)
  33. grid.addWidget(self.save_dir_text, 2, 0, 1, 2)
  34. grid.addWidget(self.save_dir_btn, 2, 2, 1, 1)
  35. grid.addWidget(self.view_data_btn, 3, 0, 1, 2)
  36. grid.addWidget(self.save_data_btn, 3, 2, 1, 1)
  37. self.table_view = QTableView()
  38. self.table_view.setFixedWidth(500)
  39. self.table_view.setFixedHeight(100)
  40. hbox.addWidget(self.table_view)
  41. hbox.addLayout(grid)
  42. 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 源数据。

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

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

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

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

  1. def view_data_btn_click(self):
  2. columns = self.data_group_column_text.text().strip()
  3. column_list = []
  4. if columns != '':
  5. column_list = columns.split(',')
  6. self.data_frame_group = self.data_frame.groupby(column_list, as_index=False).sum()
  7. print(self.data_frame_group)
  8. model = TableModelView(self.data_frame_group)
  9. self.table_view.setModel(model)

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

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

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

更多相关文章

  1. 2010.10.30———Android(安卓)03
  2. Android(安卓)Bundle类别
  3. android环境搭建
  4. android 面向对象数据库 db40使用demo
  5. Android之Room
  6. Android中Adapter类详解
  7. WebKit android介绍
  8. android背景选择器selector用法汇总
  9. Android音频开发之AudioTrack

随机推荐

  1. c语言根号函数是什么
  2. c语言大于等于怎么打?
  3. c程序中宏展开是在什么时候进行的?
  4. 用C语言指针如何求最大值最小值
  5. c++定义数组的方法
  6. c语言中%是什么意思
  7. C语言程序的模块化通过什么实现
  8. c语言标识符有哪三类?
  9. c语言fopen打开文件失败的原因是什么?
  10. c语言如何求最大公约数和最小公倍数?