一、场景分析
闲来无事,老婆说叫我开发一个课堂点名桌面小程序,给她在课堂随机点名学生问问题。
人生苦短,那就用 Python 给她写一个吧。
二、依赖安装
因为要用到 excel,所以安装两个依赖:
pip install openpyxl pip install pandas pip install pyinstaller
复制
三、程序代码
roll-call.py:
import random import tkinter as tk import pandas as pd def excel_read(): # 读取当前路径下学生名单 input_path=r".\学生名单.xlsx" # 读取 Excel 文件,将其存储在一个DataFrame对象中 df = pd.read_excel(input_path) first_column_array = df['学生姓名'].values #print(first_column_array) return first_column_array def random_pick_student(students): # 随机选择一个学生 picked_student = random.choice(students) return picked_student def main(): nparray = excel_read() # 转换为 list students = nparray.tolist() def roll_call(label): # 修改 label text if len(students) == 0: label.config(text="所有学生都点过名了") else: picked_student = random_pick_student(students) str = f"本次被点名的学生是:{picked_student}" label.config(text=str) students.remove(picked_student) # 创建主窗口 root = tk.Tk() # 设置主窗口的宽度和高度 window_width = 300 window_height = 200 # 获取屏幕的宽度和高度 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() # 计算主窗口在屏幕上的起始坐标 x_coordinate = (screen_width - window_width) // 2 y_coordinate = (screen_height - window_height) // 2 # 设置主窗口的位置和大小 root.geometry(f"{window_width}x{window_height}+{x_coordinate}+{y_coordinate}") root.title("课堂幸运儿点名程序") # 创建标签 label = tk.Label(root, text="按【点名】键开始随机点名,按【关闭】键结束~~") # 使用 grid() 方法将标签放置在第一行的第 0 列和第 1 列,columnspan 合并两列 label.grid(row=0, column=0, columnspan=2) # 创建按钮 button1 = tk.Button(root, text="点名", command=lambda: roll_call(label), bg="green", fg="white", width=10) button2 = tk.Button(root, text="关闭", command=root.quit) # 使用 grid() 方法将按钮放置在第二行的第 0 列和第 1 列 button1.grid(row=1, column=0, padx=10, pady=20) button2.grid(row=1, column=1, padx=10, pady=20) # 设置第一行的权重为 1 root.rowconfigure(0, weight=1) # 设置第二行的权重为 1 root.rowconfigure(1, weight=1) # 设置列的权重,让组件在水平方向上居中 root.columnconfigure(0, weight=1) root.columnconfigure(1, weight=1) # 进入主事件循环 root.mainloop() if __name__ == "__main__": main()
复制
- 整个程序的执行,是先在当前路径下读取 EXCEL 学生名单.xlsx。
- 读取第一列到列表 students。
- 点击【点名】按钮的时候,会调用绑定的方法 roll_call,随机选中 students 列表中的一个元素,修改弹窗的标签文本,然后从 students 中移除已经点过名的学生。
学生名单.xlsx:
四、运行
py .\roll-call.py
复制
五、打包成 exe
pyinstaller -w roll-call.py # -w 禁止弹出 CMD 窗口。
复制
将学生名单.xlsx 拷贝到 dist\roll-call 下面,然后右键将 exe 文件发送到桌面快捷方式:
六、网盘程序欢迎取用
现成打包好的程序