import tkinter as tk
from tkinter import messagebox
import random
import time
def load_students(filename):
try:
with open(filename, 'r', encoding='utf-8') as file:
students = file.readlines()
return [s.strip() for s in students if s.strip()]
except FileNotFoundError:
messagebox.showerror("错误", "找不到学生名单文件")
return None
def pick_student():
student = random.choice(students)
current_student.set(student)
label.config(text=student)
def start_button_clicked():
global stop_time
stop_time = None
for _ in range(10): #10表示随机跳动的次数
pick_student()
time.sleep(0.5) #调整跳动速度
label.config(text="正在选择中...")
def stop_button_clicked():
global stop_time
if stop_time is None:
stop_time = time.time()
pick_student()
else:
messagebox.showerror("错误", "已经停止选择")
root = tk.Tk()
root.title("随机点名系统")
students = load_students("students.txt")
if students is None:
root.destroy()
exit()
# 创建一个StringVar变量用于存储当前选中的学生
current_student = tk.StringVar()
# 创建标签显示选中的学生
label = tk.Label(root, text="", font=("Arial", 24))
label.pack(pady=20)
# 创建开始按钮
start_button = tk.Button(root, text="开始", command=start_button_clicked)
start_button.pack()
# 创建停止按钮
stop_button = tk.Button(root, text="停止", command=stop_button_clicked)
stop_button.pack()
root.mainloop()
1. 导入所需的库和模块:
tkinter:用于创建图形用户界面。
messagebox:用于显示错误消息框。
random:用于从列表中随机选择元素。
time:用于控制程序的暂停时间。
2. 定义一个函数Load_students(filename),用于从指定的文件名中读取学生名单。如果文件不存在,会弹出一个错误消息框。
3. 定义一个函数pick_student(),用于从学生名单中随机选择一个学生,并将其设置为当前选中的学生。
4. 定义一个函数start_button_clicked(),当点击开始按钮时调用。它会设置全局变量stop_time为None,然后循环调用pick_student()函数10次,每次调用之间暂停0.5秒。同时,将标签的文本设置为"正在选择中..."。
5. 定义一个函数stop_button_clicked(),当点击停止按钮时调用。如果stop_time为None,表示尚未开始选择学生,此时将其设置为当前时间。否则,弹出一个错误消息框提示已经停止选择。
6. 创建一个Tkinter窗口,并设置标题为"随机点名系统"。
7. 调用Load_students("students.txt")函数加载学生名单。如果返回值为None,表示文件未找到或无法读取,程序将销毁窗口并退出。
8. 创建一个StringVar变量current_student用于存储当前选中的学生。
9. 创建一个标签Label用于显示选中的学生。
10. 创建两个按钮:开始按钮和停止按钮,分别绑定到start_button_clicked()和stop_button_clicked()函数。
11. 使用root.mainloop()启动Tkinter的主循环,使窗口保持打开状态并响应用户操作