点名神器制作
今天来个简单的:点名神器
还是一样,我们用tkinter库和re库
#导入库中大部分功能
import re
from tkinter import *
下来创建个窗口
# 实例窗口
i=40
root = Tk()
root.title('点名神器')
root.geometry('600x400+50+50')
root.resizable(0, 0)
下来做出输入框
#姓名输入
L1 = Label(root, text='请输入姓名:', font=('黑体', 20))
L1.place(x=10, y=40)
entry = Entry(root, font=('黑体', 20), fg='pink')
entry.place(x=170, y=40)
#学号输入
L1 = Label(root, text='请输入学号:', font=('黑体', 20))
L1.place(x=10, y=100)
entry1 = Entry(root, font=('黑体', 20), fg='pink')
entry1.place(x=170, y=100)
接下来就是最费兄弟(手)的时候:
学生名单
这里我用的是字典:
#名单
dic_name = {
'20220901': '致远',
'20220902': '俊驰',
'20220903': '雨泽',
'20220904': '烨磊',
'20220905': '晟睿',
'20220906': '文昊',
'20220907': '修洁',
'20220908': '黎昕',
'20220909': '远航',
'20220910': '旭尧',
'20220911': '鸿涛',
'20220912': '伟祺',
'20220913': '荣轩',
'20220914': '越泽',
'20220915': '浩宇',
'20220916': '瑾瑜',
'20220917': '皓轩',
'20220918': '擎苍',
'20220919': '擎宇',
'20220920': '志泽',
'20220921': '子轩',
'20220922': '睿渊',
'20220923': '弘文',
'20220924': '哲瀚',
'20220925': '雨泽',
'20220926': '楷瑞',
'20220927': '建辉',
'20220928': '晋鹏',
'20220929': '申蒙',
'20220930': '天磊',
'20220931': '绍辉',
'20220932': '泽洋',
'20220933': '鑫磊',
'20220934': '鹏煊',
'20220935': '昊强',
'20220936': '伟宸',
'20220937': '博超',
'20220938': '君浩',
'20220939': '子骞',
'20220940': '鹏涛',
}
为什么要这样弄呢?
因为强迫症舒服。。。。
下来就是 最最最重要的时刻:
验证系统
我们先创建出两个空列表:
#学号名单
q=[]
#已签到
p=[]
将学号导入名单列表
我用的是遍历:
for k in dic_name:
q.append(k)
下来就是识别身份了:
#识别身份
def name():
#全局变量
global i
#获取输入的信息
c=entry1.get()
b=entry.get()
zhpattern = re.compile(u'[\u4e00-\u9fa5]+')
match = zhpattern.search(c)
#判断是否输入完毕
if b=='' or c=='':
text.set('你还没输入学号或姓名哦!!!!')
#判断格式是否正确
elif match or b.isdigit() == True or len(c)!=8:
text.set('格式错误!!请重新输入。。。')
#判断是否在学号内
elif c in q:
a=dic_name[c]
#判断此人是否已签到
if a != b:
text.set('信息不正确,请重新输入')
#判断错误
else:
if a in p:
text.set(f'{b}已签到')
else:
text.set(f'{b},签到成功')
p.append(a)
#未签到人数显示
i=i-1
text1.set(f'未签到人数:{i}')
else:
text.set('格式错误!!请重新输入。。。')
#全员签到
if i == 0:
text.set('恭喜,全员到齐')
text1.set('')
其作用看标签即可。。。。(偷个懒罢了)
下来:按钮坐标和对应函数
#签到按钮
B1 = Button(root, text='签到', font=('黑体', 25), command=name)
B1.place(x=470, y=70)
#文字显示
text = StringVar()
L2 = Label(root, textvariable=text, font=('黑体', 20))
L2.place(x=300, y=200, anchor=CENTER)
text.set('请输入姓名和学号')
最后我们还要显示未签到人数:
#人数显示
text1 = StringVar()
L2 = Label(root, textvariable=text1, font=('黑体', 20))
L2.place(x=300, y=300, anchor=CENTER)
text1.set(f'未签到人数:{i}')
root.mainloop()
就这么简单。。。。。