自编一个在已有名单基础上的点名考勤系统,简单实用
首先需准备人同名单:用记事本即可,每行一个,空行会自动剔除。
全部代码如下:
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()
因配合抽签系统,代码中加入了准备抽签的在位人员名单,为方便测试,加了生成文档的删除按钮,可根据需要修改。



