欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python学习笔记--工资条发放软件

程序员文章站 2022-03-20 15:29:08
近期学习python,便写点东西练手,主要使用了pyqt5,eric6,smtplib,pymysql,xlrd。 主要功能为:通过固定模板的excel上传员工信息以及当月工资条,然后向员工邮箱发送当月工资条。效果如下: 程序界面: 工资条模板: 员工模板: 1.使用eric6画出界面(我始终坚信, ......

  近期学习python,便写点东西练手,主要使用了pyqt5,eric6,smtplib,pymysql,xlrd。

  主要功能为:通过固定模板的excel上传员工信息以及当月工资条,然后向员工邮箱发送当月工资条。效果如下:

  程序界面:

  python学习笔记--工资条发放软件

  工资条模板:

  python学习笔记--工资条发放软件

  员工模板:

  python学习笔记--工资条发放软件

 

  1.使用eric6画出界面(我始终坚信,程序员的审美,没有最丑,只有更丑):

  python学习笔记--工资条发放软件

  2.编译窗口得到如下代码

  python学习笔记--工资条发放软件
  1 # -*- coding: utf-8 -*-
  2 
  3 # Form implementation generated from reading ui file 'D:\work\python_workspace\SalarySheet\main.ui'
  4 #
  5 # Created by: PyQt5 UI code generator 5.10.1
  6 #
  7 # WARNING! All changes made in this file will be lost!
  8 
  9 from PyQt5 import QtCore, QtGui, QtWidgets
 10 import time
 11 
 12 class Ui_MainWindow(object):
 13     def setupUi(self, MainWindow):
 14         MainWindow.setObjectName("SalarySheet")
 15         MainWindow.resize(506, 514)
 16         self.centralWidget = QtWidgets.QWidget(MainWindow)
 17         self.centralWidget.setObjectName("centralWidget")
 18         self.import_employee = QtWidgets.QPushButton(self.centralWidget)
 19         self.import_employee.setGeometry(QtCore.QRect(10, 450, 75, 23))
 20         self.import_employee.setObjectName("import_employee")
 21         self.delete_employee = QtWidgets.QPushButton(self.centralWidget)
 22         self.delete_employee.setGeometry(QtCore.QRect(130, 450, 75, 23))
 23         self.delete_employee.setObjectName("delete_employee")
 24         self.label = QtWidgets.QLabel(self.centralWidget)
 25         self.label.setGeometry(QtCore.QRect(130, 20, 31, 16))
 26         self.label.setObjectName("label")
 27         self.employee_count = QtWidgets.QLabel(self.centralWidget)
 28         self.employee_count.setGeometry(QtCore.QRect(175, 22, 54, 12))
 29         self.employee_count.setText("")
 30         self.employee_count.setObjectName("employee_count")
 31         self.label_2 = QtWidgets.QLabel(self.centralWidget)
 32         self.label_2.setGeometry(QtCore.QRect(10, 20, 54, 12))
 33         self.label_2.setObjectName("label_2")
 34         self.label_3 = QtWidgets.QLabel(self.centralWidget)
 35         self.label_3.setGeometry(QtCore.QRect(300, 20, 54, 12))
 36         self.label_3.setObjectName("label_3")
 37         self.label_4 = QtWidgets.QLabel(self.centralWidget)
 38         self.label_4.setGeometry(QtCore.QRect(400, 20, 31, 16))
 39         self.label_4.setObjectName("label_4")
 40         self.salary_count = QtWidgets.QLabel(self.centralWidget)
 41         self.salary_count.setGeometry(QtCore.QRect(440, 22, 54, 12))
 42         self.salary_count.setText("")
 43         self.salary_count.setObjectName("salary_count")
 44         self.import_salary = QtWidgets.QPushButton(self.centralWidget)
 45         self.import_salary.setGeometry(QtCore.QRect(300, 450, 75, 23))
 46         self.import_salary.setObjectName("import_salary")
 47         self.delete_salary = QtWidgets.QPushButton(self.centralWidget)
 48         self.delete_salary.setGeometry(QtCore.QRect(420, 450, 75, 23))
 49         self.delete_salary.setObjectName("delete_salary")
 50         self.send = QtWidgets.QPushButton(self.centralWidget)
 51         self.send.setGeometry(QtCore.QRect(210, 340, 75, 31))
 52         self.send.setObjectName("send")
 53         self.paln = QtWidgets.QLabel(self.centralWidget)
 54         self.paln.setGeometry(QtCore.QRect(210, 390, 71, 20))
 55         self.paln.setText("")
 56         self.paln.setObjectName("paln")
 57         self.employee = QtWidgets.QTableWidget(self.centralWidget)
 58         self.employee.setSelectionBehavior(1)
 59         self.employee.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
 60         self.employee.setAlternatingRowColors(True)
 61         self.employee.setGeometry(QtCore.QRect(10, 50, 191, 381))
 62         self.employee.setRowCount(0)
 63         self.employee.setColumnCount(2)
 64         self.employee.setObjectName("employee")
 65         item = QtWidgets.QTableWidgetItem()
 66         self.employee.setHorizontalHeaderItem(0, item)
 67         item = QtWidgets.QTableWidgetItem()
 68         self.employee.setHorizontalHeaderItem(1, item)
 69         self.employee.horizontalHeader().setDefaultSectionSize(87)
 70         self.employee.verticalHeader().setDefaultSectionSize(30)
 71         self.salary = QtWidgets.QTableWidget(self.centralWidget)
 72         self.salary.setSelectionBehavior(1)
 73         self.salary.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
 74         self.salary.setAlternatingRowColors(True)
 75         self.salary.setGeometry(QtCore.QRect(300, 50, 191, 391))
 76         self.salary.setRowCount(0)
 77         self.salary.setColumnCount(2)
 78         self.salary.setObjectName("salary")
 79         item = QtWidgets.QTableWidgetItem()
 80         self.salary.setHorizontalHeaderItem(0, item)
 81         item = QtWidgets.QTableWidgetItem()
 82         self.salary.setHorizontalHeaderItem(1, item)
 83         self.salary.horizontalHeader().setDefaultSectionSize(87)
 84         self.salary.verticalHeader().setDefaultSectionSize(30)
 85         self.salary_date = QtWidgets.QDateEdit(self.centralWidget)
 86         self.salary_date.setGeometry(QtCore.QRect(210, 60, 70, 22))
 87         self.salary_date.setObjectName("salary_date")
 88         now_day = time.strftime("%Y-%m", time.localtime())
 89         self.salary_date.setDate(QtCore.QDate.fromString(now_day, 'yyyy-MM'))
 90         self.query = QtWidgets.QPushButton(self.centralWidget)
 91         self.query.setGeometry(QtCore.QRect(210, 100, 71, 23))
 92         self.query.setObjectName("query")
 93         MainWindow.setCentralWidget(self.centralWidget)
 94 
 95         self.retranslateUi(MainWindow)
 96         QtCore.QMetaObject.connectSlotsByName(MainWindow)
 97 
 98     def retranslateUi(self, MainWindow):
 99         _translate = QtCore.QCoreApplication.translate
100         MainWindow.setWindowTitle(_translate("SalarySheet", "SalarySheet"))
101         self.import_employee.setText(_translate("SalarySheet", "导入"))
102         self.delete_employee.setText(_translate("SalarySheet", "删除"))
103         self.label.setText(_translate("SalarySheet", "总数:"))
104         self.label_2.setText(_translate("SalarySheet", "员工清单"))
105         self.label_3.setText(_translate("SalarySheet", "工资条"))
106         self.label_4.setText(_translate("SalarySheet", "总数:"))
107         self.import_salary.setText(_translate("SalarySheet", "导入"))
108         self.delete_salary.setText(_translate("SalarySheet", "删除"))
109         self.send.setText(_translate("SalarySheet", "发送"))
110         item = self.employee.horizontalHeaderItem(0)
111         item.setText(_translate("SalarySheet", "员工"))
112         item = self.employee.horizontalHeaderItem(1)
113         item.setText(_translate("SalarySheet", "邮箱"))
114         item = self.salary.horizontalHeaderItem(0)
115         item.setText(_translate("SalarySheet", "部门"))
116         item = self.salary.horizontalHeaderItem(1)
117         item.setText(_translate("SalarySheet", "员工"))
118         self.salary_date.setDisplayFormat(_translate("SalarySheet", "yyyy/M"))
119         self.query.setText(_translate("SalarySheet", "发放查询"))
120 
121 
122 if __name__ == "__main__":
123     import sys
124     app = QtWidgets.QApplication(sys.argv)
125     MainWindow = QtWidgets.QMainWindow()
126     ui = Ui_MainWindow()
127     ui.setupUi(MainWindow)
128     MainWindow.show()
129     sys.exit(app.exec_())
View Code

  3.完成excel读取模块   

  python学习笔记--工资条发放软件
 1 import xlrd
 2 
 3 def read_excel(file_name,file_type):
 4     workbook =  xlrd.open_workbook(file_name)
 5     sheet_names = workbook.sheet_names()
 6     #只读取sheet1
 7     sheet_name = sheet_names[0]
 8     sheet = workbook.sheet_by_name(sheet_name)
 9     result = []
10     if file_type == 'employee':
11         for i in range(sheet.nrows - 1):
12             result.append(sheet.row_values(i + 1))
13     elif file_type == 'salary':
14         result.append(str(int(sheet.row_values(0)[0])))
15         for i in range(sheet.nrows - 3):
16             result.append(sheet.row_values(i + 3))
17     return result
18 
19 if __name__ == '__main__':
20     print(read_excel('C:/Users/hasee/Desktop/工资条.xlsx','salary'))
View Code

  4.完成数据库操作模块,数据库采用MYSQL   

    ①创建员工表和工资条表

    python学习笔记--工资条发放软件
 1 CREATE TABLE `employee` (
 2   `id` int(11) NOT NULL AUTO_INCREMENT,
 3   `name` varchar(255) DEFAULT NULL,
 4   `email` varchar(255) DEFAULT NULL,
 5   `state` varchar(255) DEFAULT NULL,
 6   `department` varchar(255) DEFAULT NULL,
 7   PRIMARY KEY (`id`)
 8 ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
 9 
10 CREATE TABLE `salarysheet` (
11   `id` int(11) NOT NULL AUTO_INCREMENT,
12   `salary_date` date DEFAULT NULL,
13   `department` varchar(255) DEFAULT NULL,
14   `name` varchar(255) DEFAULT NULL,
15   `jbgz` varchar(255) DEFAULT NULL,
16   `jxgz` varchar(255) DEFAULT NULL,
17   `zkxm` varchar(255) DEFAULT NULL,
18   `kg` varchar(255) DEFAULT NULL,
19   `cd` varchar(255) DEFAULT NULL,
20   `bj` varchar(255) DEFAULT NULL,
21   `sj` varchar(255) DEFAULT NULL,
22   `kqgz` varchar(255) DEFAULT NULL,
23   `jbgz2` varchar(255) DEFAULT NULL,
24   `xj` varchar(255) DEFAULT NULL,
25   `zfgjj` varchar(255) DEFAULT NULL,
26   `sbxj` varchar(255) DEFAULT NULL,
27   `grsds` varchar(255) DEFAULT NULL,
28   `dkdjhj` varchar(255) DEFAULT NULL,
29   `sfgz` varchar(255) DEFAULT NULL,
30   `yfjx` varchar(255) DEFAULT NULL,
31   `zkgz` varchar(255) DEFAULT NULL,
32   `bz` varchar(255) DEFAULT NULL,
33   `state` varchar(255) DEFAULT NULL,
34   PRIMARY KEY (`id`)
35 ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
View Code

 

    ②完成数据库相关操作

    python学习笔记--工资条发放软件
  1 import pymysql.cursors
  2 
  3 def insert_employees(employees):
  4     # 连接MySQL数据库
  5     connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='salarysheet',
  6                                  charset='utf8', cursorclass=pymysql.cursors.DictCursor)
  7     try:
  8         # 通过cursor创建游标
  9         cursor = connection.cursor()
 10         for employee in employees:
 11             if len(employee) != 4:
 12                 return str(employee)
 13             cursor.execute("select id from `employee` where state = 0 and `name` = '"+str(employee[2])+"' and email = '"+str(employee[3])+"' and department = '"+str(employee[1])+"'")
 14             if cursor.rowcount > 0:
 15                 continue
 16             # 创建sql 语句,并执行
 17             cursor.execute("INSERT INTO `employee` (`name`, `email`,`state`,`department`) VALUES ('"+str(employee[2])+"', '"+str(employee[3])+"','0','"+str(employee[1])+"')")
 18         # 提交SQL
 19         connection.commit()
 20         return ''
 21     except Exception as e:
 22         connection.rollback()
 23         return e
 24     finally:
 25         cursor.close()
 26         connection.close()
 27 
 28 def insert_salarys(salarys):
 29     # 连接MySQL数据库
 30     connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='salarysheet',
 31                                  charset='utf8', cursorclass=pymysql.cursors.DictCursor)
 32     try:
 33         # 通过cursor创建游标
 34         cursor = connection.cursor()
 35         salary_date = salarys[0]
 36         for i in range(len(salarys)):
 37             if i == 0:
 38                 continue
 39             salary = salarys[i]
 40             if len(salary) != 21:
 41                 return str(salary)
 42             cursor.execute("select id from `salarysheet` where state = 0 and `name` = '"+salary[2]+"' and DATE_FORMAT(`salary_date`,'%Y%m') = '"+salary_date+"' and department = '"+salary[1]+"'")
 43             if cursor.rowcount > 0:
 44                 continue
 45             # 创建sql 语句,并执行
 46             cursor.execute("INSERT INTO `salarysheet` (`salary_date`,`department`,`name`,`jbgz`,`jxgz`,`zkxm`,`kg`,`cd`,`bj`,`sj`,`kqgz`,`jbgz2`,`xj`,`zfgjj`,`sbxj`,`grsds`,`dkdjhj`,`sfgz`,`yfjx`,`zkgz`,`bz`,`state`) "
 47                            +"VALUES (date_format('"+salary_date+"01', '%Y%m%d'), '"+str(salary[1])+"', '"+str(salary[2])+"', '"+str(salary[3])+"', '"+str(salary[4])+"', '"+str(salary[5])+"', '"+str(salary[6])+"', '"+str(salary[7])+"', '"+str(salary[8])+"', '"+str(salary[9])+"', '"
 48                            +str(salary[10])+"', '"+str(salary[11])+"', '"+str(salary[12])+"', '"+str(salary[13])+"', '"+str(salary[14])+"', '"+str(salary[15])+"', '"+str(salary[16])+"', '"+str(salary[17])+"', '"+str(salary[18])+"', '"+str(salary[19])+"', '"+str(salary[20])+"', '"+str(0)+"')")
 49         # 提交SQL
 50         connection.commit()
 51         return ''
 52     except Exception as e:
 53         connection.rollback()
 54         return e
 55     finally:
 56         cursor.close()
 57         connection.close()
 58 
 59 def delete_employee(name,email):
 60     # 连接MySQL数据库
 61     connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='salarysheet',
 62                                  charset='utf8', cursorclass=pymysql.cursors.DictCursor)
 63     # 通过cursor创建游标
 64     cursor = connection.cursor()
 65     # 创建sql 语句,并执行
 66     sql = "update `employee` set `state` = 1 where `name` = '"+name+"' and `email` = '"+email+"'"
 67     cursor.execute(sql)
 68     # 提交SQL
 69     connection.commit()
 70     cursor.close()
 71     connection.close()
 72 
 73 def delete_salary(department,name):
 74     # 连接MySQL数据库
 75     connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='salarysheet',
 76                                  charset='utf8', cursorclass=pymysql.cursors.DictCursor)
 77     # 通过cursor创建游标
 78     cursor = connection.cursor()
 79     # 创建sql 语句,并执行
 80     sql = "update `salarysheet` set `state` = 1 where `name` = '"+name+"' and `department` = '"+department+"'"
 81     cursor.execute(sql)
 82     # 提交SQL
 83     connection.commit()
 84     cursor.close()
 85     connection.close()
 86 
 87 def table_count(table):
 88     # 连接MySQL数据库
 89     connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='salarysheet',
 90                                  charset='utf8', cursorclass=pymysql.cursors.DictCursor)
 91     # 通过cursor创建游标
 92     cursor = connection.cursor()
 93     # 创建sql 语句,并执行
 94     sql = "select id from `"+table+"` where state = 0"
 95     cursor.execute(sql)
 96     list = cursor.rowcount
 97     cursor.close()
 98     connection.close()
 99     return list
100 
101 
102 def select_table(table,date=None):
103     # 连接MySQL数据库
104     connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123', db='salarysheet',
105                                  charset='utf8', cursorclass=pymysql.cursors.DictCursor)
106     # 通过cursor创建游标
107     cursor = connection.cursor()
108     # 创建sql 语句,并执行
109     if table == 'employee':
110         sql = "select * from `"+table+"` where state = 0"
111     elif table == 'salarysheet':
112         sql = "select * from `" + table + "` where state = 0 and DATE_FORMAT(salary_date,'%Y%m') = '"+date+"'"
113     cursor.execute(sql)
114     list = cursor.fetchall()
115     cursor.close()
116     connection.close()
117     return list
118 
119 def formart_date(date):
120     ss = date.split('/')
121     return ss[0] + '0' + ss[1] if len(ss[1]) == 1 else ss[0] + ss[1]
View Code

 

  5.完成邮件发送模块

  python学习笔记--工资条发放软件
 1 #! /usr/bin/env python
 2 # -*- coding: UTF-8 -*-
 3 import smtplib
 4 from email.mime.text import MIMEText
 5 mailto_list=['xxx@qq.com']           #收件人(列表)
 6 mail_host="smtp.163.com"            #使用的邮箱的smtp服务器地址,这里是163的smtp地址
 7 mail_user="xxx@163.com"                           #用户名
 8 mail_pass="xxx"                             #密码
 9 def send_mail(to_list,sub,content):
10     me = u'综合部'
11     msg = MIMEText(content,_subtype='html')
12     msg['Subject'] = sub
13     msg['From'] = me
14     msg['To'] = ";".join(to_list)                #将收件人列表以‘;’分隔
15     try:
16         server = smtplib.SMTP()
17         server.connect(mail_host)                            #连接服务器
18         server.login(mail_user,mail_pass)               #登录操作
19         server.sendmail(me, to_list, msg.as_string())
20         server.close()
21         print('发送成功')
22     except Exception as e:
23         print(e)
24 
25 def formart_mail_msg(m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20):
26     return '''
27             <div></div><div><includetail><div style="font:Verdana normal 14px;color:#000;"><div style="position:relative;"><div><table border="0" cellpadding="0" cellspacing="0" width="1605" style="border-collapse:
28          collapse;width:1205pt"><colgroup><col width="72" style="width:54pt"><col width="82" style="mso-width-source:userset;mso-width-alt:2624;width:62pt"><col width="72" style="width:54pt"><col width="90" style="mso-width-source:userset;mso-width-alt:2880;width:68pt"><col width="82" style="mso-width-source:userset;mso-width-alt:2624;width:62pt"><col width="95" style="mso-width-source:userset;mso-width-alt:3040;width:71pt"><col width="59" style="mso-width-source:userset;mso-width-alt:1888;width:44pt"><col width="59" span="3" style="mso-width-source:userset;mso-width-alt:1888;
29          width:44pt"><col width="91" style="mso-width-source:userset;mso-width-alt:2912;width:68pt"><col width="83" style="mso-width-source:userset;mso-width-alt:2656;width:62pt"><col width="82" style="mso-width-source:userset;mso-width-alt:2624;width:62pt"><col width="88" style="mso-width-source:userset;mso-width-alt:2816;width:66pt"><col width="88" style="mso-width-source:userset;mso-width-alt:2816;width:66pt"><col width="88" span="2" style="mso-width-source:userset;mso-width-alt:2816;
30          width:66pt"><col width="82" style="mso-width-source:userset;mso-width-alt:2624;width:62pt"><col width="104" style="mso-width-source:userset;mso-width-alt:3328;width:78pt"><col width="82" style="mso-width-source:userset;mso-width-alt:2624;width:62pt"></colgroup><tbody><tr height="18" style="height:13.5pt"><td colspan="17" height="18" class="xl144" width="1337" style="height:13.5pt;
31           width:1003pt">xxx公司%s工资表</td>
32           <td class="xl132" width="82" style="width:62pt"></td>
33           <td class="xl133" width="104" style="width:78pt"> </td>
34           <td class="xl132" width="82" style="width:62pt"></td>
35          </tr>
36          <tr height="18" style="mso-height-source:userset;height:13.5pt">
37           <td rowspan="2" class="xl98">部门</td>
38           <td rowspan="2" class="xl98">姓名</td>
39           <td colspan="10" class="xl146" style="border-right:.5pt solid black">当月工资</td>
40           <td colspan="4" class="xl98" style="border-left:none">代扣代缴项</td>
41           <td rowspan="2" class="xl99">实发工资</td>
42           <td rowspan="2" class="xl143" width="104" style="width:78pt">已发绩效<br>
43             (扣除)</td>
44           <td rowspan="2" class="xl100" width="82" style="width:62pt">转卡工资</td>
45          </tr>
46          <tr height="18" style="height:13.5pt">
47           <td height="18" class="xl118" style="height:13.5pt;border-top:none">基础工资</td>
48           <td class="xl74" style="border-top:none;border-left:none">绩效工资</td>
49           <td class="xl74" style="border-top:none;border-left:none">增扣项目</td>
50           <td class="xl74" style="border-top:none;border-left:none">旷工</td>
51           <td class="xl98" style="border-top:none;border-left:none">迟到</td>
52           <td class="xl98" style="border-top:none;border-left:none">病假</td>
53           <td class="xl99" style="border-top:none;border-left:none">事假</td>
54           <td class="xl95" style="border-top:none;border-left:none">考勤工资(扣发)</td>
55           <td class="xl100" width="83" style="border-top:none;border-left:none;width:62pt">加班工资</td>
56           <td class="xl93" style="border-top:none;border-left:none">小计</td>
57           <td class="xl135" style="border-top:none;border-left:none">社保小计</td>
58           <td class="xl136" style="border-top:none;border-left:none">公积金小计</td>
59           <td class="xl98" style="border-top:none;border-left:none">个人所得税</td>
60           <td class="xl98" style="border-top:none;border-left:none">代扣代缴合计</td>
61          </tr>
62          <tr height="18" style="height:13.5pt">
63           <td class="xl127" width="82" style="border-top:none;width:62pt">%s</td>
64           <td class="xl127" width="72" style="border-top:none;border-left:none;width:54pt">%s</td>
65           <td class="xl118" style="border-top:none">%s</td>
66           <td class="xl128" style="border-top:none;border-left:none">%s</td>
67           <td class="xl118" style="border-top:none"> </td>
68           <td class="xl74" style="border-top:none;border-left:none">%s</td>
69           <td class="xl98" style="border-top:none;border-left:none">%s</td>
70           <td class="xl98" style="border-top:none;border-left:none">%s</td>
71           <td class="xl98" style="border-top:none;border-left:none">%s</td>
72           <td class="xl95" style="border-top:none;border-left:none">%s</td>
73           <td class="xl99" style="border-top:none;border-left:none">%s</td>
74           <td class="xl93" style="border-top:none;border-left:none">%s</td>
75           <td class="xl135" style="border-top:none;border-left:none">%s</td>
76           <td class="xl137" style="border-left:none">%s</td>
77           <td class="xl101" style="border-left:none">%s</td>
78           <td class="xl98" style="border-top:none;border-left:none">%s</td>
79           <td class="xl73" style="border-top:none;border-left:none">%s</td>
80           <td class="xl134" style="border-top:none">%s</td>
81           <td class="xl99" style="border-top:none;border-left:none">%s</td>
82          </tr></tbody></table></div><div><br></div><div><tincludetail></tincludetail></div></div></div><!--<![endif]--></includetail></div>
83         ''' % (m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16,m17,m18,m19,m20)
View Code

 

  6.完成按钮事件绑定及相关处理(邮件发送功能暂未完成,原因嘛,就是突然不想写了,任性)

  python学习笔记--工资条发放软件
  1 # -*- coding: utf-8 -*-
  2 
  3 """
  4 Module implementing buttonWindows.
  5 """
  6 
  7 from PyQt5.QtCore import pyqtSlot
  8 from PyQt5.QtWidgets import QMainWindow
  9 from PyQt5 import QtWidgets
 10 from Ui_main import Ui_MainWindow
 11 import sys
 12 from salarysql import *
 13 from excel_utils import *
 14 from mail_utils import *
 15 
 16 
 17 class buttonWindows(QMainWindow, Ui_MainWindow):
 18 
 19     def __init__(self, parent=None):
 20         super(buttonWindows, self).__init__(parent)
 21         self.setupUi(self)
 22         self.init_employee()
 23         self.init_salary()
 24 
 25     # 初始化employee
 26     def init_employee(self):
 27         employees = select_table('employee')
 28         employee_count = len(employees)
 29         self.employee_count.setText(str(employee_count))
 30         self.employee.setRowCount(employee_count)
 31         for i in range(len(employees)):
 32             self.employee.setItem(i, 0, QtWidgets.QTableWidgetItem(str(employees[i].get('name'))))
 33             self.employee.setItem(i, 1, QtWidgets.QTableWidgetItem(employees[i].get('email')))
 34 
 35     # 初始化employee
 36     def init_salary(self):
 37         # 初始化salary
 38         salary_date = formart_date(self.salary_date.text())
 39         salarysheets = select_table('salarysheet',salary_date)
 40         salarysheet_count = len(salarysheets)
 41         self.salary_count.setText(str(salarysheet_count))
 42         self.salary.setRowCount(salarysheet_count)
 43         for i in range(len(salarysheets)):
 44             self.salary.setItem(i, 1, QtWidgets.QTableWidgetItem(salarysheets[i].get('name')))
 45             self.salary.setItem(i, 0, QtWidgets.QTableWidgetItem(salarysheets[i].get('department')))
 46 
 47     @pyqtSlot()
 48     def on_import_employee_clicked(self):
 49         fileName, filetype = QtWidgets.QFileDialog.getOpenFileName(self,"选取文件","C:/","All Files (*)")
 50         try:
 51             employees = read_excel(fileName,'employee')
 52             msg = insert_employees(employees)
 53             if msg == '':
 54                 QtWidgets.QMessageBox.information(self, '提示', '导入成功!!!')
 55             else:
 56                 QtWidgets.QMessageBox.information(self, '警告', '导入失败,请确认excel文件排版!!!\n'+str(msg))
 57         except Exception as e:
 58             QtWidgets.QMessageBox.information(self,'警告','导入失败,请确认文件格式!!!\n'+str(e))
 59         self.init_employee()
 60 
 61     @pyqtSlot()
 62     def on_delete_employee_clicked(self):
 63         cid = self.employee.currentRow()
 64         name = self.employee.item(cid, 0).text()
 65         email = self.employee.item(cid, 1).text()
 66         delete_employee(name, email)
 67         self.init_employee()
 68 
 69     @pyqtSlot()
 70     def on_import_salary_clicked(self):
 71         fileName, filetype = QtWidgets.QFileDialog.getOpenFileName(self,"选取文件","C:/","All Files (*)")
 72         try:
 73             salarys = read_excel(fileName,'salary')
 74             msg = insert_salarys(salarys)
 75             if msg == '':
 76                 QtWidgets.QMessageBox.information(self, '提示', '导入成功!!!')
 77             else:
 78                 QtWidgets.QMessageBox.information(self, '警告', '导入失败,请确认excel文件排版!!!\n'+str(msg))
 79         except Exception as e:
 80             QtWidgets.QMessageBox.information(self,'警告','导入失败,请确认文件格式!!!\n'+str(e))
 81         self.init_salary()
 82 
 83     @pyqtSlot()
 84     def on_delete_salary_clicked(self):
 85         cid = self.salary.currentRow()
 86         department = self.salary.item(cid, 0).text()
 87         name = self.salary.item(cid, 1).text()
 88         delete_salary(department, name)
 89         self.init_salary()
 90 
 91 
 92     @pyqtSlot()
 93     def on_send_clicked(self):
 94         reply = QtWidgets.QMessageBox.question(self, '确认', '你确定要发送吗?', QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
 95         if reply == QtWidgets.QMessageBox.Yes:
 96             if int(self.employee_count.text()) == 0:
 97                 QtWidgets.QMessageBox.information(self, '提示', '员工数不能为0!!!')
 98                 return
 99             elif int(self.salary_count.text()) == 0:
100                 QtWidgets.QMessageBox.information(self, '提示', '工资条数不能为0!!!')
101                 return
102 
103 
104     @pyqtSlot()
105     def on_query_clicked(self):
106         self.init_salary()
107 
108 
109 if __name__ == "__main__":
110     app = QtWidgets.QApplication(sys.argv)
111     bw = buttonWindows()
112     bw.show()
113     sys.exit(app.exec_())
View Code