今天,将介绍一个基于 Python 的简易随机点名小工具,通过这个小工具,可以轻松地从花名册中随机选取名字,用于课堂点名或其他随机选择的场景。在日常教学、会议或活动中,我们经常需要进行随机点名或随机选择,为了简化这一过程,我编写了一个使用 Python 和 tkinter 构建的随机点名小工具。
①如何使用
-
点击 "打开文件" 按钮,选择你的花名册文件(支持 Excel 和 CSV 格式)。
-
点击 "开始" 按钮,随机点名结果将在界面中滚动显示。
-
点击 "停止" 按钮,滚动显示停止,最终名字将显示在界面上。
②示例演示
随机点名工具
③Python源码
import pandas as pd
import tkinter as tk
from tkinter import ttk, filedialog
import threading
import time
import sys
sys.setrecursionlimit(2000)
def read_file(file_path):
# 获取文件扩展名
file_extension = file_path.split('.')[-1].lower()
if file_extension == 'xls' or file_extension == 'xlsx':
# 读取 Excel 文件
df = pd.read_excel(file_path)
elif file_extension == 'csv':
# 读取 CSV 文件
df = pd.read_csv(file_path)
else:
print("不支持的文件格式")
return
return df
class NameRollerGUI:
def __init__(self, root):
self.root = root
self.root.title("随机点名")
# 设置样式
style = ttk.Style()
style.configure("TFrame", background="#ececec")
style.configure("TLabel", background="#ececec", font=("Arial", 12))
style.configure("TButton", background="#b3b3b3", font=("Arial", 12))
# 文件选择部分
file_frame = ttk.Frame(root, style="TFrame")
file_frame.pack(pady=20)
self.file_label = ttk.Label(file_frame, text="选择花名册文件:", style="TLabel")
self.file_label.grid(row=0, column=0, padx=10, pady=5, sticky="w")
self.file_edit = ttk.Entry(file_frame, width=40)
self.file_edit.grid(row=1, column=0, padx=10, pady=5, sticky="w")
self.browse_button = ttk.Button(file_frame, text="打开文件", command=self.open_file, style="TButton")
self.browse_button.grid(row=1, column=1, padx=10, pady=5)
# 循环滚动部分
result_frame = ttk.Frame(root, style="TFrame")
result_frame.pack(pady=20)
self.result_label = ttk.Label(result_frame, text="随机选中的名字:", style="TLabel")
self.result_label.grid(row=0, column=0, padx=10, pady=5, sticky="w")
self.result_edit = ttk.Entry(result_frame, width=40)
self.result_edit.grid(row=1, column=0, padx=10, pady=5, sticky="w")
self.start_button = ttk.Button(result_frame, text="开始", command=self.start_rolling, style="TButton")
self.start_button.grid(row=1, column=1, padx=10, pady=5)
self.stop_button = ttk.Button(result_frame, text="停止", command=self.stop_rolling, style="TButton")
self.stop_button.grid(row=1, column=2, padx=10, pady=5)
# 最终名字部分
final_frame = ttk.Frame(root, style="TFrame")
final_frame.pack(pady=20)
self.final_label = ttk.Label(final_frame, text="最终名字:", style="TLabel")
self.final_label.grid(row=0, column=0, padx=10, pady=5, sticky="w")
self.final_edit = ttk.Entry(final_frame, width=40)
self.final_edit.grid(row=1, column=0, padx=10, pady=5, sticky="w")
# 初始化变量
self.file_path = ""
self.rolling_flag = False
self.final_name = ""
def open_file(self):
# 打开文件对话框选择花名册文件
self.file_path = filedialog.askopenfilename(filetypes=[("Excel 文件", "*.xls;*.xlsx"), ("CSV 文件", "*.csv")])
self.file_edit.delete(0, tk.END)
self.file_edit.insert(0, self.file_path)
def start_rolling(self):
if self.file_path:
# 启动循环滚动线程
self.rolling_flag = True
threading.Thread(target=self.roll_names).start()
def stop_rolling(self):
# 停止循环滚动
self.rolling_flag = False
def roll_names(self):
while self.rolling_flag:
# 随机选取一行
random_row = read_file(self.file_path).sample()
name = random_row.iloc[0, 0] # 假设名字在第一列
self.result_edit.delete(0, tk.END)
self.result_edit.insert(0, name)
time.sleep(0.01) # 控制滚动速度
# 循环结束后将最终名字输出到 final_edit
self.final_name = name
self.final_edit.delete(0, tk.END)
self.final_edit.insert(0, self.final_name)
if __name__ == "__main__":
root = tk.Tk()
app = NameRollerGUI(root)
root.geometry("600x400") # 设置窗口大小
root.configure(background="#ececec")
root.mainloop()
关注微信公众号,后台回复“随机点名工具”,即可免费获取exe工具.
最后:
小编会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!