Python 课堂点名桌面小程序

发布于:2025-03-01 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、场景分析

闲来无事,老婆说叫我开发一个课堂点名桌面小程序,给她在课堂随机点名学生问问题。

人生苦短,那就用 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()
  1. 整个程序的执行,是先在当前路径下读取 EXCEL  学生名单.xlsx。
  2. 读取第一列到列表 students。
  3. 点击【点名】按钮的时候,会调用绑定的方法 roll_call,随机选中 students 列表中的一个元素,修改弹窗的标签文本,然后从 students 中移除已经点过名的学生。

学生名单.xlsx:

四、运行

 py .\roll-call.py

五、打包成 exe

pyinstaller -w roll-call.py
# -w 禁止弹出 CMD 窗口。

将学生名单.xlsx 拷贝到 dist\roll-call 下面,然后右键将 exe 文件发送到桌面快捷方式:

六、网盘程序欢迎取用

现成打包好的程序