介绍
一个令广大学生畏惧的程序——随机点名器
开发语言:Python
# 可交互
# 图形界面
# 极简
本来想玩得花一点,但——emmmm,you know.
对文件的要求
您的名单应为xls格式,并且您在输入时请不要带上后缀名,否则会导致程序无法找到您的名单。
您的名单应与程序在同一文件夹下。
您的名单应位于文件的Sheet1内。
名字只能位于“姓名”之下的单元格。
关于程序
本程序由一只萌新开发,比较简陋,bug比较多,实在用不了就不要用,以免对您的PC造成损害
程序会报错,解决方案未找到,再者,程序还是可以跑的,那只萌新就懒得弄了。
对您的要求
实现效果
代码
import tkinter
import time
import xlrd
import random
import tkinter.messagebox
color = '#A7D6C4' # 淡绿色
def window_1():
window = tkinter.Tk()
window.title('随机点名器') # 窗口名称
window.config(background=color) # 颜色
screenwidth = window.winfo_screenwidth() # 获取屏幕宽度
screenheight = window.winfo_screenheight() # 获取屏幕长度
width, height = 1024, 512 # 设置窗口长宽
size_geo = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
window.geometry(size_geo) # 设置窗口属性
window.iconbitmap('.\\mark.ico') # 窗口图标
greeting = tkinter.Label(window, text='一个令广大学生畏惧的程序', bg=color, fg='#ffffff',
font=('华文行楷', 42)) # 用来show off的标签
greeting.pack()
def get_time():
time2 = time.strftime('%Y-%m-%d %H:%M:%S')
clock = tkinter.Label(window, text=time2, font=20, bg=color, fg='#173F3F')
clock.place(relx=0.01, rely=0.935)
clock.after(1000, get_time) # 1000ms=1s
label_prompt = tkinter.Label(window,
text='请输入xls文件的名称',
font=('微软雅黑', 15),
width=20,
compound='center',
fg='#000000',
bg=color)
label_prompt.place(relx=512 / 1024,
rely=150 / 512,
anchor='center')
file_name = tkinter.StringVar()
entery = tkinter.Entry(window,
width=30,
textvariable=file_name)
entery.place(relx=512 / 1024,
rely=200 / 512,
anchor='center')
label_warning = tkinter.Label(window,
text='⚠️ 注意:请认真阅读说明书后再开始,否则程序可能无法正常运行。',
font=('微软雅黑', 10), width=50,
compound='center',
fg='#EB3324',
bg=color)
label_warning.place(relx=512 / 1024,
rely=230 / 512,
anchor='center')
def fuc(window_none):
global colum_number, row_number, luck_student, row_num, row_start
file = str(entery.get())
print(file) # 已获得user输入的文件名
# 抽取名字
target_excel = xlrd.open_workbook(f'.\\{file}.xls')
my_target = target_excel.sheet_by_index(0)
for row in range(my_target.nrows):
for colum in range(my_target.ncols):
# print(f'my_target({row},{colum}) is ', my_target.cell_value(row, colum))
if str(my_target.cell_value(row, colum)) == '姓名':
colum_number = colum # 获取目标列
row_start = row
# print(row, colum)
row_number = my_target.nrows # 获取目标行数
# print(row_number)
row_num = random.randint(row_start + 1, row_number)
luck_student = my_target.cell_value(row_num, colum_number)
# print(luck_student)
new_window(window_none)
btn = tkinter.Button(window,
text='开始',
fg="#000000",
width=7,
compound='center',
bg="#ffffff",
command=lambda: fuc(window))
btn.place(relx=512 / 1024,
rely=400 / 512,
anchor='center')
get_time()
window.mainloop()
def new_window(window):
window_one = tkinter.Toplevel(window)
window_one.geometry('512x256+512+256')
window_one.config(background="#314E4F")
window_one.title('幸运学生')
window_one.iconbitmap('.\\mark.ico')
label_welcome = tkinter.Label(window_one,
text='就是你啦',
font=('微软雅黑', 30),
fg='#D4FCFF',
bg='#314E4F', )
label_name = tkinter.Label(window_one,
text=luck_student,
font=('华文行楷', 40),
fg='#ffffff',
bg='#314E4F',
width=150)
label_welcome.place(relx=256 / 512, rely=100 / 256, anchor='center')
label_name.place(relx=256 / 512, rely=180 / 256, anchor='center')
# button_exit = tkinter.Button(window_one,
# text='关闭',
# fg="#000000",
# width=7,
# bg="#ffffff",
# compound=tkinter.CENTER,
# Command=window_one.quit())
# button_exit.place(relx=256 / 512, rely=90 / 256, anchor='center')
print('行号', row_num, luck_student)
window_1()
参考文章
python线程 tkinter gui界面 | lambada函数在tkinter中的应用
记录 python-tkinter包 Entry做(用户名-密码)登陆界面
Label控件、Button控件和TextBox控件的知识总结
python 使用 openpyxl 处理 Excel 教程
客套话
感谢使用,本程序开源,有谬误还请指教!
留言在此文下即可。