使用openpyxl
库来处理Excel文件和tkinter
库来创建GUI窗口,以下是一段示例代码:
from tkinter import Tk, Label, Button, messagebox
import openpyxl
from openpyxl import load_workbook
def load_student_data(filename):
try:
wb = load_workbook(filename)
ws = wb.active
student_data = []
for row in ws.iter_rows(min_row=2, values_only=True):
student_data.append(row)
return student_data
except Exception as e:
messagebox.showerror("错误", f"加载Excel文件失败: {str(e)}")
return None
def mark_present(student_id):
global student_data
for i, student in enumerate(student_data):
if student[0] == student_id:
student_data[i].append('到场')
wb.save('student_list.xlsx')
break
def mark_absent(student_id):
global student_data
for i, student in enumerate(student_data):
if student[0] == student_id:
student_data[i].append('缺席')
wb.save('student_list.xlsx')
break
def next_student():
global current_index
if current_index < len(student_data):
current_index += 1
student_name, student_id = student_data[current_index - 1][1], student_data[current_index - 1][0]
student_info.config(text=f"姓名: {student_name}\n学号: {student_id}")
else:
messagebox.showinfo("完成", "所有学生都已点名完毕")
def on_present():
mark_present(student_data[current_index - 1][0])
next_student()
def on_absent(event):
mark_absent(student_data[current_index - 1][0])
next_student()
# 主窗口
root = Tk()
root.title("学生点名系统")
# Excel文件路径
filename = 'student_list.xlsx'
# 加载学生数据
student_data = load_student_data(filename)
current_index = 1 # 第一行通常是标题行,从第二行开始
# 更新GUI的函数
def update_gui():
if student_data:
student_name, student_id = student_data[current_index - 1][1], student_data[current_index - 1][0]
student_info.config(text=f"姓名: {student_name}\n学号: {student_id}")
# 学生信息显示
student_info = Label(root, text="", font=('Helvetica', 16))
student_info.pack(pady=20)
# 到场按钮
button_present = Button(root, text="到场", font=('Helvetica', 16), bg='green', fg='white', command=on_present)
button_present.pack(side="left", fill="both", expand=True, padx=10, pady=10)
# 缺席按钮
button_absent = Button(root, text="缺席", font=('Helvetica', 16), bg='red', fg='white', bg='red')
button_absent.pack(side="right", fill="both", expand=True, padx=10, pady=10)
# 启动GUI应用
update_gui()
root.mainloop()
这段代码做了以下事情:
load_student_data
函数从Excel文件中加载学生信息。mark_present
和mark_absent
函数来标记学生的到场和缺席状态。next_student
函数来更新显示下一个学生的信息。on_present
和on_absent
函数分别用于处理到场和缺席的按钮点击事件。update_gui
函数在GUI中显示当前学生的信息。请确保将student_list.xlsx
文件放到与此脚本相同的目录中,并且该文件包含至少两列:学号和姓名。