自编一个在已有名单基础上的点名考勤系统,简单实用
首先需准备人同名单:用记事本即可,每行一个,空行会自动剔除。
全部代码如下:
import os import tkinter as tk import tkinter.messagebox as msgbox from datetime import date def cb_checked(): l1['text'] = [] global name1 for ctr, int_var in enumerate(cb_intvar): if int_var.get(): l1['text'] = '%s,' %(l1['text'].strip()+names[ctr].strip()) name1 = l1['text'].split(',') l2.configure(text=len(name1)-1) l4.configure(text=str(len(names)-len(name1) + 1)) if l1['text']: b1.configure(command=insert_kq, background='yellow') else: b1.configure(command=insert_kqbky,background='gray') def opentxt1(): f = open('人员名单.txt', 'r') # x创建,a追加,w写入 global names txt=[] for line in f.readlines(): if line != '\n': txt.append(line) names=list(txt) def insert_kq(): if name1!=[]: file1 = open('抽签名单.txt', 'w') file2 = open('考勤在位名单.txt', 'w') file = open('考勤记录.txt', 'a') file.write(str(date.today()) + ' 考勤信息 ') file.write('(应到%d人,实到%d人):\n'%(len(names),len(name1)-1)) for i in range(len(name1)): if name1[i]!='': s = str(name1[i]+'\n') file.write(s) file1.write(s) file2.write(s) file.close() file2.close() file1.close() b1.configure(command=insert_kqbky, background='gray') msgbox.askokcancel('提示', '考勤信息已登记!是否转到抽签系统?') if True: root.destroy() else: msgbox .showerror('错误提示', '未选取任何人!') def insert_kqbky(): if name1 == []: msgbox.showerror('错误提示', '未选取任何人!') else: msgbox.showerror('错误提示', '请勿重复登记!') def qcsyjl(): file1 = open("考勤记录.txt", "r") file2 = open('考勤记录(备份).txt', 'a') s = file1.read() file2.write(s) file1.close() file2.close() os.remove('.\考勤在位名单.txt') os.remove('.\考勤记录.txt') msgbox.showerror('提示', '已删除:考勤记录、考勤在位名单!') root = tk.Tk() root.state("zoomed") opentxt1() cb_intvar = [] name1= [] i=12 j=0 l3 = tk.Label(root, bg='white', text='总人数:' + str(len(names)), font=('微软雅黑', 20)) # 总人数统计 l3.grid(row=0, column=0, sticky='e') l0 = tk.Label(root, bg='white', text='选中数:', font=('微软雅黑', 20))#选中数标签 l0.grid(row=0, column=1,sticky='e') l2 = tk.Label(root, bg='lightgreen', text='', font=('微软雅黑', 20)) #选中数量 l2.grid(row=0, column=2, sticky='w') l5 = tk.Label(root, bg='white', text='缺席人数:', font=('微软雅黑', 20))#未到位人数标签 l5.grid(row=0, column=3,sticky='e') l4 = tk.Label(root, bg='goldenrod', text='', font=('微软雅黑', 20))#未到位人数 l4.grid(row=0, column=4,sticky='w') l1 = tk.Label(root, bg='green', text='', width=60, font=('微软雅黑', 20)) # 选中内容清单 b1 = tk.Button(root,text='登记考勤信息',background='gray',font=('微软雅黑',18),command=insert_kqbky) b1.grid(row=0, column=5,padx=5,pady=5) b2 = tk.Button(root,text='清空考勤信息记录',background='red',font=('微软雅黑',18),command=qcsyjl) b2.grid(row=1, column=5,padx=5,pady=5) for k in names: cb_intvar.append(tk.IntVar()) tk.Checkbutton(root, text=k.strip(), variable=cb_intvar[-1],width = 11,font=('微软雅黑', 20), indicatoron = False,anchor = 'center',bg='white', relief = 'groove',selectcolor = 'limegreen', command=cb_checked).grid(row=i//6, column=j%6, sticky='w',padx=18,pady=5) i += 1 j += 1 root.mainloop()
因配合抽签系统,代码中加入了准备抽签的在位人员名单,为方便测试,加了生成文档的删除按钮,可根据需要修改。