课堂随机点名程序

        我是一个小白,自学python两个月,还各种偷懒摸鱼,昨天LP检查我学习成果,让我编一个随机点名程序,她有两个班学生,给我名单,要求在窗口中返回学生随机姓名。这个好简单,把两个名单放在两list里,窗口里面放两个按钮,每个按钮的功能是在list里随机选人,我写了下面的代码:

import tkinter as tk  
import random
  
#随机选人函数  
def show_name1():  
    name = random.choice(names1)  
    name_label.config(text="请:" + name + "同学回答")  
def show_name2():  
    name = random.choice(names2)  
    name_label.config(text="请:" + name + "同学回答")  
  
#窗口  
root = tk.Tk()  
root.title("幸运时刻")  
  
#定义姓名list  
names1 = ["张三", "李四"]  
names2 = ["王五","赵六"]  
#按钮
btn1 = tk.Button(root, text="1班", command=show_name1) 
btn2 = tk.Button(root, text="2班", command=show_name2)  
name_label = tk.Label(root, text="")  
btn1.pack() 
btn2.pack() 
name_label.pack()  
  
root.mainloop()

但是这个脚本的通用性较差,只适合确定班数,确定名单的情况,为了增加脚本的通用性,我又引入xlrd库,从特定文件夹读取所有excel文档,从中提取学生名单,写入dic,在窗口中显示每一个班的按钮,点击按钮后随机从班级里抽取学生姓名,代码如下:

import tkinter as tk  
import random
import os  
import xlrd

#获取文件及文件夹的路径
file_paths = []
file_Name = []    
for root, dirs, files in os.walk('c:\data'):  #相对路径 
    for file in files:  
        file_paths.append(os.path.join(root, file))   
        file_Name.append(file[:-5])
print(file_paths)
print(file_Name)  

#将各班人名单写入字典
class_Name = {}
for i in range (len(file_Name)):
    data = xlrd.open_workbook(f'{file_paths[i]}')
    table = data.sheet_by_index(0)
    stName = table.col_values(1)
    class_Name[file_Name[i]] = stName
print(class_Name) 
    

# 定义一个函数,响应按钮  
def on_button_click(button_text): 
      
    print(button_text)
    name = random.choice(class_Name[button_text])
    name_label.config(text="请:" + name + "同学回答",font=("Arial Bold",30))  
    
  
# 创建一个窗口  
root = tk.Tk()
root.geometry('500x300')
root.title("幸运时刻")  
canvas = tk.Canvas(root)
canvas.pack()
image_path = 'C:/py/sdd.png'
im = tk.PhotoImage(file= image_path)
canvas.create_image(300,500,image = im)
label = tk.Label(root,image = im)
label.image = im
label.place(x=0,y=0,relwidth=1,relheight=1)
# 创建按钮,并绑定函数
for i in range (len(file_Name)):
    btn = tk.Button(root, text=f'{file_Name[i]}', command=lambda button_text=f'{file_Name[i]}': on_button_click(button_text)).place(x=30*i,y=250) 
    

# # 创建标签,用于显示选中的姓名  
name_label = tk.Label(root, text="") 
  
# # 将按钮和标签添加到窗口中  
name_label.place(x=40,y=60)  
  
# 运行窗口  
root.mainloop()

这里的file_Name是excel文件名,用班级名未excel取名,有几个班级就有几个excel文件,文件放在data文件夹里,直接放在C盘下,需要使用时,把文件放进去就好了。

excel文件中姓名放在第二列。

第一个脚本,第一次发帖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值