随机点名人们都会遇到随机抽号或者随机点名的场景,利用Python可以方便地实现一个这样的系统。很多时候,课堂上老师想随机抽取一位同学回答问题,界面设置有开始和停止按钮,学生名单存储在一个txt文本文件中点击开始按钮,名字快速的随机跳动,点击停止按钮,出现一个随机选取的学生姓名。再次点击开始按钮可以进行新一轮的随机抽号的过程,系统实现界面如下图所示。
import tkinter as tk
import random
import time
from threading import Thread
class RandomNamePicker:
def __init__(self, root):
self.root = root
self.root.title("随机点名系统")
self.root.geometry("500x300")
self.root.configure(bg='lightgrey')
self.names = self.load_names()
self.running = False
# 标题
self.title_label = tk.Label(self.root, text="课堂随机点名", font=('Arial', 24), bg='darkgrey', fg='yellow')
self.title_label.pack(fill=tk.X, pady=10)
# 左边按钮框架
self.button_frame = tk.Frame(self.root, bg='lightgrey')
self.button_frame.pack(side=tk.LEFT, padx=20, pady=20)
self.start_button = tk.Button(self.button_frame, text="开始", font=('Arial', 16), command=self.start)
self.start_button.pack(pady=10)
self.stop_button = tk.Button(self.button_frame, text="停止", font=('Arial', 16), command=self.stop)
self.stop_button.pack(pady=10)
# 右边名字显示框架
self.display_frame = tk.Frame(self.root, bg='lightgrey')
self.display_frame.pack(side=tk.RIGHT, padx=20, pady=20, expand=True)
self.label = tk.Label(self.display_frame, text="", font=('Arial', 36), fg='red', bg='lightgrey')
self.label.pack(pady=50)
def load_names(self):
with open("students.txt", "r", encoding="utf-8") as file:
names = file.readlines()
return [name.strip() for name in names]
def start(self):
self.running = True
self.thread = Thread(target=self.random_name)
self.thread.start()
def stop(self):
self.running = False
self.thread.join()
def random_name(self):
while self.running:
name = random.choice(self.names)
self.label.config(text=name)
time.sleep(0.1)
if __name__ == "__main__":
root = tk.Tk()
app = RandomNamePicker(root)
root.mainloop()
不过,还需要在这个代码所在的文件下写一个文本文档
代码解析:
确保students.txt文件与Python脚本在同一目录下,并包含学生名单。
运行Python代码。点击“开始”按钮,名字会快速随机跳动。点击“停止”按钮,显示一个随机选取的学生姓名。再次点击“开始”按钮可以进行新一轮的随机抽号过程。
导入必要的库:
tkinter:用于创建图形用户界面。
random:用于随机选择学生名字。
time:用于控制名字跳动的速度。
threading.Thread:用于在单独的线程中运行随机名字跳动的逻辑。
类定义:
RandomNamePicker类初始化时设置界面标题、尺寸和背景颜色。
load_names方法从students.txt文件中读取学生名单。
start方法启动一个新线程来执行random_name方法。
stop方法停止随机名字跳动,并等待线程结束。
random_name方法在running标志为True时不断随机选择名字并更新显示。
主程序:
创建主窗口并实例化RandomNamePicker类。
进入主事件循环。
今天就到这里啦!!!希望大家都不挂科!!!