Python实用小工具(5)——课堂随机点名工具(附源码+exe文件)

今天,将介绍一个基于 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仿真......希望能帮到你!

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatpyMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值