我是一个小白,自学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文件中姓名放在第二列。
第一个脚本,第一次发帖