分享交流
合作共赢!

Python编写四人24小时值班表生成小程序【简单粗暴】

一、简介

比较重要的机房、动力供电等运维场景中,一般需要24小时有人值班,领导往往会在每个月前整理一个Excel值班表格。每次手工制作表格比较浪费时间,所以这里花了一点时间,用Python代码实现自动导出Excel值班表的功能。

实现场景:

共4个人值班,白夜和夜班两班倒,这里假设四个人分别称为为A,B,C,D。

以第一个人A为例,A第一天上白班;第二天白班A休息,然后上夜班;第三天、第四天休息两天;第五天又开始上白班……简单地说“白班–>夜班–>休两天”然后再“白班–>夜班–>休两天”,以此轮流,每个人都一样全年没有节假日和周末),如下图:

二、实现步骤

1.思路

表头:先根据实际情况,定义一个表头列表,for循环根据行和列规则写入Excel;

日期:获取当月天数后,参考表头规则写入Excel即可;

白班和夜班:首先定义一个循环阶段的所有值班人员为一个列表,然后定义一个规则,每次取第一个人员开始值班,取完后从列表中拿掉,拿掉后放在列表的尾部,以此取值,后续不断循环。

UI界面:写完以上内容到Excel后,可以加入一个图形界面,方便使用,如下简单粗暴的界面:

2.代码

1.使用到的模块:

from xlsxwriter import workbook
import datetime,calendar
from tkinter.ttk import *
from tkinter import *
import tkinter.messagebox
import os

2.UI窗口类:Schedule_Gui

class Schedule_Gui:
def __init__(self,initWindow):
self.initWindow = initWindow

def set_init_window(self):
#self.initWindow = Tk()
self.nw = 0.1
self.nh = 0.2
self.initWindow.title("24h值班表生成工具 - Author: 张琼杰")
self.initWindow.geometry('1000x700')
self.initWindow.resizable(0,0)
self.importExcelButton = Button(self.initWindow,text='导出Excel',width='8',bg='lightblue',command=self.WriteToExcel)
self.importExcelButton.place(relx=0.49,rely=self.nh+0.4)

mainmenu = Menu(self.initWindow)
menuFile = Menu(mainmenu)
mainmenu.add_cascade(label='文件',menu=menuFile)
menuFile.add_command(label='退出',command=self.initWindow.destroy)
self.initWindow.config(menu=mainmenu)

if (os.path.isfile("images\logo.png")):
self.backgroundImage = tkinter.PhotoImage(file=r"images\logo.png",width=300,height=110)
self.imageLabel = Label(self.initWindow, image=self.backgroundImage)
self.initWindow.update()
self.bg_width = self.backgroundImage.width()/self.initWindow.winfo_width()
self.bg_height = self.backgroundImage.height()/self.initWindow.winfo_height()
self.imageLabel.place(relx=1-self.bg_width, rely=0, width=300, height=110)

self.ProLabel = Label(self.initWindow, text='当前月份')
self.ProLabel.place(relx=0.1, rely=self.nh+0.1, relwidth=0.1)
self.ProCombobox = Combobox(self.initWindow, textvariable=vars, values=[''])
self.ProCombobox.place(relx=0.18, rely=self.nh+0.1, relwidth=0.1)
self.ProCombobox.set(value=str(datetime.datetime.now().month)+"月")

self.pathLabel = Label(self.initWindow, text='保存路径')
self.pathLabel.place(relx=0.1, rely=self.nh+0.2, relwidth=0.1)
self.defaultPath = tkinter.StringVar(value='D:\\')
self.pathEntry = Entry(self.initWindow, bd=3,textvariable=self.defaultPath)
self.pathEntry.place(relx=0.18, rely=self.nh+0.2, relwidth=0.3)

def WriteToExcel(self):
if(self.ProCombobox.get() != '' and self.pathEntry.get() != ''):
path = self.pathEntry.get()
try:
if(os.path.exists(path)):
if (path[len(path) - 1] == '\\'):
filePath = path + "24h_Schedule" + ".xlsx"
else:
filePath = path + "\\" + "24h_Schedule" + ".xlsx"
print(filePath)
sche = Schedule_Export()
sche.export_schedule(filePath)
else:
tkinter.messagebox.showerror(title="错误:",message="路径不存在!")
except:
tkinter.messagebox.showwarning(title="警告:",message="此文件可能已打开,请关闭后重试!")
else:
tkinter.messagebox.showinfo(title="提示:",message="请补全内容后重试!")

3.主代码逻辑操作类:Schedule_Export

此内容查看价格9.9立即购买

4.调用:

def main():
gui = Tk()
gui.update()
agui = Schedule_Gui(gui)
agui.set_init_window()
gui.mainloop()

if __name__ == "__main__":
main()

3.打包py文件为exe格式文件

参考琼杰笔记文章:Python调用阿里云API接口实现自定义功能【二】——DescribeInstance窗口操作

打包完就可以愉快地使用了,此实现功能比较简单,仅供参考,后续可能在此基础添加其他功能。

赞(3) 打赏
未经允许不得转载:琼杰笔记 » Python编写四人24小时值班表生成小程序【简单粗暴】

评论 抢沙发

评论前必须登录!

 

分享交流,合作共赢!

联系我们加入QQ群

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册