大家好!我刚刚编写了一个#python 小程序来帮助老师进行课堂点名。只需要将学生名单存储在一个.xlsx文件中,运行程序,即可随机点名并把结果保存到一个新的文件中。这不仅可以减轻老师的压力,也能为课堂增加一些趣味性,如果不会python,需要定制可以私信我,免费为您服务。#教育科技
展示图片:
代码如下:
import tkinter as tk
import random
import openpyxl
class RollCall:
def __init__(self, master):
self.master = master
self.class_var = tk.StringVar()
self.class_var.set("请选择班级") # 初始值为空字符串
# 加载所有班级名称
self.class_names = []
for sheet_name in self.load_sheet_names("names.xlsx"):
if not sheet_name.startswith('_'):
self.class_names.append(sheet_name)
# 创建下拉菜单
class_option = tk.OptionMenu(self.master, self.class_var, *self.class_names)
class_option.pack(padx=180, pady=20)
self.name_list = []
self.current_name = ""
self.running = False
# 创建标签对象,用于显示目前被点到的学生姓名
self.name_label = tk.Label(self.master, text="", font=("汉仪魏碑简", 80))
self.name_label.pack(padx=180, pady=80)
# 创建开始和停止按钮
self.start_button = tk.Button(self.master, text="开始", command=self.start,width=10, height=3)
self.stop_button = tk.Button(self.master, text="停止", command=self.stop,width=10, height=3)
# 将按钮添加到窗口上
self.start_button.pack(side="left", padx=180, pady=20)
self.stop_button.pack(side="left", padx=120, pady=20)
# 设置窗口大小为 800x600 像素
self.master.geometry("800x600")
self.master.title("课堂点名系统")
def load_sheet_names(self, filename):
# 加载 Excel 文件中的所有工作表名称
wb = openpyxl.load_workbook(filename, read_only=True)
return wb.sheetnames
def load_names(self, filename, sheet_name):
# 加载 Excel 文件中指定班级的所有姓名
wb = openpyxl.load_workbook(filename, read_only=True)
ws = wb[sheet_name]
names = []
for row in ws.iter_rows(min_row=2):
name = row[0].value
if name:
names.append(name)
return names
def get_name(self):
# 随机选择一个学生姓名并设置为当前名称,用于在界面上显示
self.current_name = random.choice(self.name_list)
self.name_label.config(text=self.current_name)
def start(self):
# 触发点名循环
selected_class = self.class_var.get()
if not selected_class:
return # 如果没有选中班级,不进行点名
self.name_list = self.load_names("names.xlsx", selected_class)
self.running = True
while self.running:
self.get_name()
self.master.update()
def stop(self):
# 停止点名循环
self.running = False
if __name__ == '__main__':
root = tk.Tk()
app = RollCall(root)
root.mainloop()