import tkinter as tk
from datetime import datetime
from tkinter import ttk, messagebox
import cv2
from AttendanceSystem.Employee import User
from FaceRecognition.FaceCollect import faceCollect
from FaceRecognition.FeatureCompute import featureCompute
from FaceRecognition.Recognition import recognition
from SqlController import sqlController
def AddScrollbarToText(text_widget):
"""
为Text组件添加滚动条
:param text_widget: 需要添加滚动条的Text组件, 通常为tk.Text, 需要放在Frame中且含有master属性 (master属性为Text所在的容器)
"""
container = text_widget.master # 获取Text所在的容器(通常为Frame)
scrollbar = ttk.Scrollbar(container, orient="vertical", command=text_widget.yview) # 创建Scrollbar, 设置纵向滚动
scrollbar.grid(row=0, column=1, sticky="ns") # 将Scrollbar放在Text的右侧
text_widget.config(yscrollcommand=scrollbar.set) # 设置Text的纵向滚动命令为Scrollbar的set方法
# 设置网格布局的权重,以便调整大小时Text和Scrollbar可以适应
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
class InsertRecordWindow(tk.Toplevel):
def __init__(self, parent, onExit: callable = None):
"""
创建一个选择时间的窗口, 用于选择年、月、日、时、分、秒, 并返回选择的时间
:param parent: 父窗口, 需要有一个idEntry组件, 用于判断当前的人员编号
"""
super().__init__(parent)
self.parent = parent
self.title("选择时间")
self.geometry("265x275")
# 添加窗口关闭的回调函数
self.onExit = onExit
# 设置对应的变量
self.yearVar = tk.StringVar()
self.monthVar = tk.StringVar()
self.dayVar = tk.StringVar()
self.hourVar = tk.StringVar()
self.minuteVar = tk.StringVar()
self.secondVar = tk.StringVar()
# 设置默认值为当前时间
datetime_now = datetime.now()
self.yearVar.set(str(datetime_now.year))
self.monthVar.set(str(datetime_now.month))
self.dayVar.set(str(datetime_now.day))
self.hourVar.set(str(datetime_now.hour))
self.minuteVar.set(str(datetime_now.minute))
self.secondVar.set(str(datetime_now.second))
# 创建控件: 年、月、日、时、分、秒
ttk.Label(self, text="Year:").grid(row=0, column=0, padx=5, pady=5)
self.yearCombobox = ttk.Combobox(self, textvariable=self.yearVar, state="readonly",
values=[str(year) for year in range(1900, 2100)], width=12)
self.yearCombobox.grid(row=0, column=1, padx=5, pady=5)
ttk.Label(self, text="Month:").grid(row=1, column=0, padx=5, pady=5)
self.monthCombobox = ttk.Combobox(self, textvariable=self.monthVar, state="readonly",
values=[str(month) for month in range(1, 13)], width=12)
self.monthCombobox.grid(row=1, column=1, padx=5, pady=5)
ttk.Label(self, text="Day:").grid(row=2, column=0, padx=5, pady=5)
self.dayCombobox = ttk.Combobox(self, textvariable=self.dayVar, state="readonly",
values=[str(day) for day in range(1, 32)], width=12)
self.dayCombobox.grid(row=2, column=1, padx=5, pady=5)
ttk.Label(self, text="Hour:").grid(row=3, column=0, padx=5, pady=5)
self.hourCombobox = ttk.Combobox(self, textvariable=self.hourVar, state="readonly",
values=[str(hour) for hour in range(24)], width=12)
self.hourCombobox.grid(row=3, column=1, padx=5, pady=5)
ttk.Label(self, text="Minute:").grid(row=4, column=0, padx=5, pady=5)
self.minuteCombobox = ttk.Combobox(self, textvariable=self.minuteVar, state="readonly",
values=[str(minute) for minute in range(60)], width=12)
self.minuteCombobox.grid(row=4, column=1, padx=5, pady=5)
ttk.Label(self, text="Second:").grid(row=5, column=0, padx=5, pady=5)
self.secondCombobox = ttk.Combobox(self, textvariable=self.secondVar, state="readonly",
values=[str(second) for second in range(60)], width=12)
self.secondCombobox.grid(row=5, column=1, padx=5, pady=5)
# 选择记录类型
self.recordTypeVar = tk.StringVar()
self.recordTypeVar.set("签到")
ttk.Label(self, text="Record Type:").grid(row=6, column=0, padx=5, pady=5)
self.recordTypeCombobox = ttk.Combobox(self, textvariable=self.recordTypeVar, state="readonly",
values=["签到", "签退"], width=12)
self.recordTypeCombobox.grid(row=6, column=1, padx=5, pady=5)
# 创建确认按钮
self.okButton = ttk.Button(self, text="OK", command=self.ok)
self.okButton.grid(row=7, column=0, columnspan=2, pady=5)
def ok(self):
selectedDatetime = datetime(int(self.yearVar.get()), int(self.monthVar.get()),
int(self.dayVar.get()),
int(self.hourVar.get()), int(self.minuteVar.get()),
int(self.secondVar.get()))
if selectedDatetime > datetime.now():
messagebox.showerror("错误", "选择的时间不能晚于当前时间")
return
else:
employeeId = self.parent.idEntry.get()
if messagebox.askokcancel("确认", f"确定要插入记录吗?\n时间: {selectedDatetime}\n人员编号: {employeeId}"):
if self.recordTypeVar.get() == "签到":
sqlController.InsertAttendanceRecord(employeeId, selectedDatetime, 0)
else:
sqlController.InsertAttendanceRecord(employeeId, selectedDatetime, 1)
if self.onExit: # 如果有回调函数
self.onExit()
self.destroy() # 调用完成后关闭窗口
class DeleteRecordWindow(tk.Toplevel):
def __init__(self, parent, onExit=None):
super().__init__(parent)
self.master = parent
self.title("删除确认窗口")
# 添加窗口关闭的回调函数
def OnExit():
if onExit:
onExit()
self.destroy()
self.onExit = OnExit
self.protocol("WM_DELETE_WINDOW", OnExit) # 设置窗口关闭时的回调函数
# 创建选择类型标签和ComboBox
self.labelType = ttk.Label(self, text="选择类型:")
self.labelType.grid(row=0, column=0, padx=5, pady=5)
self.typeCombBox = ttk.Combobox(self, values=["记录编号", "人员编号"], state='readonly')
self.typeCombBox.grid(row=0, column=1, padx=5, pady=5)
self.typeCombBox.current(0) # 默认选择第一个选项
# 创建编号标签和输入框
self.labelNumber = ttk.Label(self, text="编号:")
self.labelNumber.grid(row=1, column=0, padx=5, pady=5)
self.entry = ttk.Entry(self)
self.entry.grid(row=1, column=1, padx=5, pady=5)
# 创建查询结果标签的Frame
self.frame = ttk.Frame(self)
self.frame.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
# 创建查询结果标签
self.resultShowText = tk.Text(self.frame, wrap="word", height=10, width=50)
self.resultShowText.grid(row=0, column=0)
# 为查询结果标签添加滚动条
AddScrollbarToText(self.resultShowText)
# 创建查询按钮
self.searchButton = ttk.Button(self, text="查询", command=self.searchNumber)
self.searchButton.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
# 创建删除按钮
self.deleteButton = ttk.Button(self, text="删除", command=self.deleteEntry, state="disabled")
self.
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕设基于Dlib和OpenCV的人脸识别考勤系统设计与实现(python源码+数据库).zip 【项目说明】 1.资源包含项目完整源码及资料,功能完善,100%可靠运行,小白则可以远程指导部署 2.项目难度适中,满足毕设、课设要求,属于比较容易上手的优质项目,资源内基本都有说明文档,按照操作即可,遇到问题也可私信交流 3.适用人群:各大计算机相关专业行业的在校学生、高校老师、公司程序员等下载使用 4.学霸、学渣都可用,可作毕设、课设、作业、实训等,高分学习必备资源 【特别强调】 项目下载解压后,项目名字和项目路径不要用中文,建议解压重命名为英文名字后再运行! 项目易上手运行! 使用过程遇到问题先搜索下,一般都是环境问题,当然也可以私信沟通,欢迎交流学习,祝顺利!
资源推荐
资源详情
资源评论
收起资源包目录
毕设基于Dlib和OpenCV的人脸识别考勤系统设计与实现(python源码+数据库).zip (16个子文件)
SqlController.py 8KB
main.py 187B
SQL
CreateDB.sql 2KB
FaceRecognition
FeatureCompute.py 3KB
FaceCollect.py 3KB
Recognition.py 5KB
AttendanceSystem
MainGUI.py 13KB
InsertWindow.py 7KB
Employee.py 3KB
ModifyWindow.py 13KB
GUIHelper.py 16KB
DeleteWindow.py 10KB
QueryWindow.py 9KB
Config.py 1KB
Models
shape_predictor_68_face_landmarks.dat 95.08MB
dlib_face_recognition_resnet_model_v1.dat 21.43MB
共 16 条
- 1
资源评论
.whl
- 粉丝: 3952
- 资源: 4864
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 机器学习与应用课程设计任务书+二手车销售数据.doc
- Unity Nature Renderer 2022.0.0植物插件
- 微信小程序实现婚礼邀请函
- 超算上机手册,xftp,ssh
- 多位复用器实现计算功能
- 详细的echarts参数详解
- 高分毕设医院只能预约挂号排队系统论文+java,html,css,mysql+idea+医院挂号
- mysql知识点整理汇总
- 医院只能预约挂号排队系统+java,html,css,mysql+idea+医院挂号
- 很强的余地都没有生日快乐
- 全球海岸线矢量数据(20240528,来自OSM).zip
- redis知识点整理汇总
- Java期末考试复习题解析-面向对象编程、异常处理、并发和Lambda表达式的实战演练
- Java编程期末考试重点与代码案例复习 - 面向对象编程、异常处理、IO、多线程和集合
- Java期末复习必备:核心编程知识点与实战题目解析
- 数据结构题目111111111
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功