一、场景分析
闲来无事,老婆说叫我开发一个课堂点名桌面小程序,给她在课堂随机点名学生问问题。
人生苦短,那就用 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 文件发送到桌面快捷方式: