前言

老姐要求做个记录销售汽车配件得的excel,我觉得太麻烦了,身为程序员的我 必须安排一个方便快捷的系统,安排上!!!

环境要求:python3,pyqt5,pandas

1、实现效果

初始界面

添加界面

2、代码实现

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import pandas as pd
import sys
import datetime
import os
from shutil import copyfileclass DataManage(QWidget):def __init__(self):super(DataManage, self).__init__()self.data_list = []self.base_path = r'C:\CarData'self.money_sum_text = '总金额:¥ 0.0'if not os.path.exists(self.base_path):os.mkdir(self.base_path)if not os.path.exists(self.base_path + '\data.xlsx'):file = open(self.base_path + '\data.xlsx', 'w')file.close()if os.path.exists(self.base_path + '\data.xlsx'):data = pd.read_excel(self.base_path + '\data.xlsx', dtype=str)self.money_sum_text = '总金额:¥{}'.format(str(data['销售金额'][:-1].astype(dtype='float').sum()))self.data_list = data.iloc[0:-1,:].values.tolist()self.init_ui()def init_ui(self):'''全局设置'''self.setWindowIcon(QIcon('i.ico'))self.setWindowTitle('汽车配件记录系统')self.resize(726, 440)grid = QGridLayout()'''菜单设置'''self.add_btn = QPushButton()self.add_btn.setText('添加数据')self.add_btn.setStyleSheet("background-color:#1890ff;color:white;border:none;font: 15px \"微软雅黑\";")self.add_btn.setFixedSize(100,30)self.add_btn.clicked.connect(self.add_btn_click)self.del_btn = QPushButton()self.del_btn.setText('删除数据')self.del_btn.setStyleSheet("background-color:#ff4949;color:white;border:none;font: 15px \"微软雅黑\";")self.del_btn.setFixedSize(100,30)self.del_btn.clicked.connect(self.del_data_row)self.query_btn = QPushButton()self.query_btn.setText('查询')self.query_btn.setStyleSheet("background-color:#1890ff;color:white;border:none;font: 15px \"微软雅黑\";")self.query_btn.setFixedSize(100,30)self.query_btn.clicked.connect(self.query_data_list)self.saveData_btn = QPushButton()self.saveData_btn.setText('打开文件')self.saveData_btn.setStyleSheet("background-color:#13ce66;color:white;border:none;font: 15px \"微软雅黑\";")self.saveData_btn.setFixedSize(100,30)self.saveData_btn.clicked.connect(self.saveData_data_click)self.money_sum = QLabel()self.money_sum.setText(self.money_sum_text)'''数据列表设置'''self.data_table = QTableWidget()self.data_table.setStyleSheet("QHeaderView::section{background-color:#DCDCDC;border:1px solid #D3D3D3;font: 15px \"微软雅黑\";}")COLUMN = 7ROW = 0self.data_table.setColumnCount(COLUMN)self.data_table.setRowCount(ROW)h_table_header = ['序号', '车型', '配件名称', '规格', '单价', '数量','销售金额']self.data_table.setHorizontalHeaderLabels(h_table_header)self.data_table.horizontalHeader().setDefaultAlignment(Qt.AlignVCenter)self.data_table.verticalHeader().setVisible(False)self.data_table.setShowGrid(True)self.data_table.setEditTriggers(QTableWidget.NoEditTriggers)self.data_table.setSelectionBehavior(QTableWidget.SelectRows)self.data_table.setSelectionMode(QTableWidget.SingleSelection)for index in range(self.data_table.columnCount()):headItem = self.data_table.horizontalHeaderItem(index)headItem.setTextAlignment(Qt.AlignVCenter)'''加入布局'''grid.addWidget(self.add_btn, 0, 0, 1, 1)grid.addWidget(self.del_btn, 0, 1, 1, 1)#grid.addWidget(self.query_btn, 0, 2, 1, 1)grid.addWidget(self.saveData_btn, 0, 2, 1, 1)grid.addWidget(self.money_sum, 0, 3, 1, 1)grid.addWidget(self.data_table, 1, 0, 1, 4)grid.setSpacing(12)self.setLayout(grid)# 初始化数据self.query_data_list()# 将新增数据的按钮绑定到该槽函数def add_btn_click(self):'''打开新增数据的弹框模块:return:'''try:AddDialog.get_add_dialog(self)self.refsh_data()except PermissionError:#reply = QMessageBox.critical(self, '标题', '严重错误对话框消息正文', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)QMessageBox.critical(self, "错误", "Excel文件正在打开,请关闭文件后操作!")except:QMessageBox.critical(self, "错误", "操作异常!")# 将查询数据的按钮绑定到该槽函数def query_data_list(self):'''查询数据、并将数据展示到主窗口的数据列表中:return:'''data = self.data_listif len(data) != 0 and len(data[0]) != 0:self.data_table.setRowCount(len(data))self.data_table.setColumnCount(len(data[0]))for i in range(len(data)):for j in range(len(data[0])):self.data_table.setItem(i, j, QTableWidgetItem(str(data[i][j])))# 将删除数据按钮绑定到该槽函数def del_data_row(self):'''删除某一行的数据信息:return:'''try:row_select = self.data_table.selectedItems()if len(row_select) != 0:row = row_select[0].row()self.data_table.removeRow(row)del self.data_list[row]self.refsh_data()except PermissionError:#reply = QMessageBox.critical(self, '标题', '严重错误对话框消息正文', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)QMessageBox.critical(self, "错误", "Excel文件正在打开,请关闭文件后操作!")except:QMessageBox.critical(self, "错误", "操作异常!")# 刷新数据到文件def refsh_data(self):'''将数据更新到文件:return:'''df = pd.DataFrame(self.data_list, columns=['序号', '车型', '配件名称', '规格', '单价', '数量','销售金额'])df['单价'].astype('float')df['数量'].astype('int')df['销售金额'].astype('float')# 保存到本地excelpath = r'C:\CarData'if not os.path.exists(path):os.mkdir(r'C:\CarData')file_name = "C:\CarData\data.xlsx"if len(self.data_list) > 0: writer = pd.ExcelWriter(file_name, engine='xlsxwriter')df.to_excel(writer, sheet_name='Sheet1', index=False)workbook  = writer.bookworksheet = writer.sheets['Sheet1']header_format = workbook.add_format({'bold': True,                          # 字体加粗'text_wrap': True,                     # 是否自动换行'valign': 'bottom',                    # 垂直对齐方式'align': 'center',                     # 水平对齐方式'border': 1,                           # 边框'top':1,                               # 上边框 'left':1,                              # 左边框'right':1,                             # 右边框'bottom':1,                            # 底边框})sumMoney = 0.0for i in df['销售金额']:sumMoney += float(i)worksheet.write_string(len(self.data_list) + 1, 6, u'总金额:{}'.format(sumMoney))writer.save()writer.close()self.money_sum.setText('总金额:¥{}'.format(sumMoney))else:os.remove(file_name)self.money_sum.setText('总金额:¥0.0')# 打开文件def saveData_data_click(self):'''打开文件:return:'''if len(self.data_list) > 0:df = pd.DataFrame(self.data_list, columns=['序号', '车型', '配件名称', '规格', '单价', '数量','销售金额'])df['单价'].astype('float')df['数量'].astype('int')df['销售金额'].astype('float')try:# 保存到文件中file_name = "C:\CarData\data.xlsx"if not os.path.exists(r'C:\CarData\copy'):os.mkdir(r'C:\CarData\copy')copyfile(file_name, "C:\CarData\copy\data_copy.xlsx")if not os.path.exists(file_name):QMessageBox.critical(self, "错误", "数据存储路径不存在,请重启系统!")os.startfile("C:\CarData\copy\data_copy.xlsx")except PermissionError:#reply = QMessageBox.critical(self, '标题', '严重错误对话框消息正文', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)QMessageBox.critical(self, "错误", "Excel文件正在打开,请关闭文件后操作!")except:QMessageBox.critical(self, "错误", "操作异常!")else:QMessageBox.critical(self, "错误", "数据为空!")
class AddDialog(QDialog):def __init__(self, parent=None):super(AddDialog, self).__init__(parent)self.init_ui(parent)def init_ui(self,parent):self.setWindowTitle('添加界面')self.resize(400, 200)'''水平布局'''hbox = QHBoxLayout()self.save_btn = QPushButton()self.save_btn.setText('保存')self.save_btn.setStyleSheet("background-color:#1890ff;color:white;border:none;")self.save_btn.setFixedSize(200,30)self.save_btn.clicked.connect(lambda :self.save_btn_click(parent))self.cancel_btn = QPushButton()self.cancel_btn.setText('取消')self.cancel_btn.setFixedSize(200,30)self.cancel_btn.clicked.connect(self.cancel_btn_click)hbox.addWidget(self.save_btn)hbox.addWidget(self.cancel_btn)hbox.setSpacing(12)'''校验器'''self.intvalidator  = QIntValidator()self.doublevalidator = QDoubleValidator()self.doublevalidator.setDecimals(2)'''表单布局'''fbox = QFormLayout()self.seq_lab = QLabel()self.seq_lab.setText('序号:')self.seq_lab.setStyleSheet("font: 15px \"微软雅黑\";")self.seq_text = QLineEdit()self.seq_text.setFixedHeight(30)self.seq_text.setValidator(self.intvalidator)self.seq_text.setPlaceholderText('请输入序号')self.name_lab = QLabel()self.name_lab.setText('车型:')self.name_lab.setStyleSheet("font: 15px \"微软雅黑\";")self.name_text = QLineEdit()self.name_text.setFixedHeight(30)self.name_text.setPlaceholderText('请输入车型')self.age_lab = QLabel()self.age_lab.setText('配件名称:')self.age_lab.setStyleSheet("font: 15px \"微软雅黑\";")self.age_text = QLineEdit()self.age_text.setFixedHeight(30)self.age_text.setPlaceholderText('请输入配件名称')self.class_lab = QLabel()self.class_lab.setText('规格:')self.class_lab.setStyleSheet("font: 15px \"微软雅黑\";")self.class_text = QLineEdit()self.class_text.setFixedHeight(30)self.class_text.setPlaceholderText('请输入规格')self.socre_lab = QLabel()self.socre_lab.setText('单价:')self.socre_lab.setStyleSheet("font: 15px \"微软雅黑\";")self.socre_text = QLineEdit()self.socre_text.setFixedHeight(30)self.socre_text.setValidator(self.doublevalidator)self.socre_text.setPlaceholderText('请输入单价')self.num_lab = QLabel()self.num_lab.setText('数量:')self.num_lab.setStyleSheet("font: 15px \"微软雅黑\";")self.num_text = QLineEdit()self.num_text.setFixedHeight(30)self.num_text.setValidator(self.intvalidator)self.num_text.setPlaceholderText('请输入数量')self.money_lab = QLabel()self.money_lab.setText('销售金额:')self.money_lab.setStyleSheet("font: 15px \"微软雅黑\";")self.money_text = QLineEdit()self.money_text.setFixedHeight(30)self.money_text.setValidator(self.doublevalidator)self.money_text.setPlaceholderText('请输入销售金额')fbox.addRow(self.seq_lab,self.seq_text)fbox.addRow(self.name_lab, self.name_text)fbox.addRow(self.age_lab, self.age_text)fbox.addRow(self.class_lab, self.class_text)fbox.addRow(self.socre_lab, self.socre_text)fbox.addRow(self.num_lab, self.num_text)fbox.addRow(self.money_lab, self.money_text)fbox.setSpacing(12)vbox = QVBoxLayout()vbox.addLayout(fbox)vbox.addLayout(hbox)self.setLayout(vbox)def save_btn_click(self,parent):if self.seq_text.text().strip() != '' and self.name_text.text().strip() != '' \and self.age_text.text().strip() != ''and self.class_text.text().strip() != '' \and self.socre_text.text().strip() != '' and self.num_text.text().strip() != '' \and self.money_text.text().strip() != '':data = [self.seq_text.text(),self.name_text.text(),self.age_text.text(),self.class_text.text(),self.socre_text.text(),self.num_text.text(),self.money_text.text()]parent.data_list.append(data)parent.query_data_list()self.close()def cancel_btn_click(self):self.close()@staticmethoddef get_add_dialog(parent=None):dialog = AddDialog(parent)return dialog.exec()if __name__ == '__main__':app = QApplication(sys.argv)main = DataManage()main.show()sys.exit(app.exec_())

 3、pyinstaller打包成exe

pyinstaller -F -w main.py --icon=i.ico

python 使用pyqt5实现了一个汽车配件记录系统相关推荐

  1. <Python>PyQt5自己编写一个音乐播放器(优化版)

    Python音乐播放器 更新日志: 20221031:添加独立播放列表 20221107:添加"上一首"."下一首"功能 展示图片: 202211071308更 ...

  2. python裂缝检测_python 裂缝识别 这是一个使用Python和PyQt5开发的一个计算机视觉辅助裂缝标注工具 - 下载 - 搜珍网...

    压缩包 : dea0e4f4dad3f0ccc7ded70e22891ce5.zip 列表 crack-label-tool-master/ crack-label-tool-master/.giti ...

  3. 八十九、Python的GUI系列 | 使用PyQt5 快速构建一个GUI 应用

    @Author:Runsen @Date:2020/7/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  4. Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI

    现在NBA联赛也进行到半决赛了,我们怎么样才能以更快的方法获取NBA的数据呢?这里我们就自己来做一个数据播报的程序 文章目录 制作NBA数据爬虫 捋顺思路 编写代码 NBAReporter.py NB ...

  5. pythongui日历控件_“五一”快到了,用Python中PyQt5做一个日历,QCalendar控件详解...

    前面内容,我们详细了解了PyQt5中的一些常用控件 精彩内容回顾 Python用PyQt5设计界面,如何正确显示一幅图片,QPixmap控件详解 拥有漂亮的笔刷才能绘制多彩界面,PythonPyQt5 ...

  6. 使用python加PyQt5,利用QMediaPlayer写一个简易的音乐播放器(进度条拖动,音量改变,播放停止切换,歌曲列表))

    当你学习了python之后,总想着利用它去做些什么,无论是制作小工具还是小游戏,都是一种锻炼. 那么,利用python加上PyQt5写一个简单的音乐播放器,可能会是一个有趣的体验. 下面我会分享一下如 ...

  7. Python: pyqt5 自己写一个窗口文本编辑器

    PyQt5是Digia的一套Qt5应用框架与python的结合,同时支持2.x和3.x.Qt库由Riverbank Computing开发,是最强大的GUI库之一. >>> 今天,我 ...

  8. 利用python安装opencv_科学网—Anaconda Python PyCharm PyQT5 OpenCV PyTorch TF2.0 安装指南 - 张重生的博文...

    Anaconda Python PyCharm PyQT5 OpenCV PyTorch TF2.0 安装指南与资料汇总 (用Anaconda配置Python集成开发环境,含Python3, PyQT ...

  9. 【Python】PyQt5.QtWidgets模块常用函数和类(使用参考源码)

    Python PyQt5.QtWidgets 模块常用函数和类. PyQt5 是一套Python绑定Digia QT5应用的框架. QtWidgets 是PyQt5下面的一个模块,包含了一整套UI元素 ...

最新文章

  1. java解析各种文档格式_java读取各类型的文件
  2. 【转】[C# 基础知识系列]专题四:事件揭秘
  3. 什么?你竟然还没有用这几个chrome插件?
  4. 机器学习前的热身(必备)
  5. JDK源码解析之 Java.lang.Boolean
  6. 木兰编程语言当事人被停职:自主创新何时当得起科技自立?
  7. eclipse 编译器 unhandled event loop exception 异常解决办法
  8. 『中文、英文词频统计分析软件』免费工具分享
  9. SourceGenerator入门指北
  10. win10连wifi显示无Internet最全解决方案
  11. Java中的求和公式_Sympy codegen:求和索引函数
  12. 关于使用itextpdf生成pdf的页面横向和竖向
  13. 中年网易,生存像是一种幸运
  14. 3d智慧城市线上3d模型展示可视化平台
  15. 七.Docker网络管理以及固定ip
  16. python交通调查数据处理_GitHub - unlimitbladeworks/traffic-monitor: 基于高德地图的交通数据分析...
  17. AI人工智能外呼机器人
  18. mysql数据初识_1、初识mysql数据库
  19. 怎么知道自己的计算机成绩,小黑盒如何查看我的电脑 电脑查成绩方法
  20. 统计全年12个月数据

热门文章

  1. setup和teardown详解【pytest系列 3】
  2. 为变现赋能 ,运营商大数据建模的五个方向
  3. 21秋招,我放弃了前端
  4. Mac篇5 mac配件选择
  5. illegal cyclic inheritance involving trait Iterable val wordRDD: RDD[String] = fileRDD.flatMap(
  6. 二叉树中前序 中序 后序的互推
  7. Pycharm 配置pylint
  8. excle转xml文件
  9. Ionic二维码扫码插件QR Scanner不能扫描一维码问题的完整解决
  10. html矩形加三角,html如何绘制带尖角(三角)的矩形