声明:原创,但很菜;仅供小白学习、有兴趣的老师点名使用
直接可以使用的工具:
链接:https://pan.baidu.com/s/1SY0PPkv5JujTW5uPuRN79g
提取码:rofp
源码:
# -*- coding: utf-8 -*-
# @Time : 2021/9/27 17:13
# @Author : 焦海俊
# @File : interface.py
# @Software: PyCharm
import tkinter as tk
import xlrd
import time
import random
from tkinter import ttk
import os
import tkinter.messagebox
def get_all_excel():
filelist = []
for root, dirs, files in os.walk(".", topdown=False):
for name in files:
str = os.path.join(root, name)
if str.split('.')[-1] == 'xlsx' or str.split('.')[-1] == 'xls':
filelist.append(str[2:])
return filelist
def open_excel():
data = dict()
file_list = get_all_excel()
for file_name in file_list:
workbook = xlrd.open_workbook(file_name)
sheet = workbook.sheet_by_index(0)
stu_list = sheet.col_values(0)
data[file_name] = stu_list
return data
class_msg_dict = open_excel()
stu_msg = []
stu_chosed_msg = []
num_stu = 0
count_stu_chosed = 0
flag = 0
btntext = '开始'
class NameStudent:
# 初始化
def __init__(self):
# 第1步,建立窗口window
self.window = tk.Tk()
# 第2步,给窗口的可视化起名字
self.window.title('点名提问小程序')
# 第3步,设定窗口的大小(长*宽)
self.window.geometry('800x800')
self.text = tk.StringVar() # 创建str类型
self.count = tk.StringVar() # 创建str类型
self.btn_text = tk.StringVar()
self.ddb_acquire_L = tk.Label(self.window, text='请选择当前班级:',font=("微软雅黑", 12))
self.ddb_acquire = ttk.Combobox(self.window)
self.ddb_acquire.configure(state="readonly")
self.ddb_acquire['value'] = list(class_msg_dict.keys())
self.ddb_acquire.bind('<<ComboboxSelected>>', self.choose)
self.ddb_acquire_L.pack()
self.ddb_acquire.pack()
# 开始点名按钮
self.btntake = tk.Button(self.window, textvariable=self.btn_text, bg='black', fg='white', font=("微软雅黑", 20),
command=self.take)
self.btn_text.set(btntext)
self.btntake.pack()
self.btntake.place(x=200, y=650, width=100, height=50)
def take(self):
"""
负责随机抽取同学提问
:return:
"""
global count_stu_chosed, stu_chosed_msg, flag, stu_msg, btntext
if num_stu == count_stu_chosed:
return
if stu_msg == [] and len(stu_chosed_msg) == 0:
print('请选择班级!!!')
tkinter.messagebox.showinfo('提示', '请选择班级!')
else:
flag += 1
while flag == 1:
btntext = '暂停'
self.btn_text.set(btntext)
desc = ''
time.sleep(0.05)
stu_chosed_num = random.randint(0, num_stu - 1 - count_stu_chosed)
desc += stu_msg[stu_chosed_num]
self.text.set(desc) # 设置内容
self.window.update() # 屏幕更新
stu_now = ''
if flag == 2:
btntext = '开始'
self.btn_text.set(btntext)
print('被点名的同学是:', self.text.get())
for i in range(0,len(stu_msg)):
if stu_msg[i] == self.text.get():
stu_now = stu_msg.pop(i)
print('当前剩余未点名名单:', stu_msg)
break
# stu_now = stu_msg.pop(stu_chosed_num)
stu_chosed_msg.append(stu_now)
count_stu_chosed += 1
self.count.set('已点名人数:%d / %d' % (count_stu_chosed, num_stu)) # 设置内容
self.window.update()
flag = 0
def reset(self):
"""
重置提问点名信息
:return:
"""
global count_stu_chosed, stu_msg, stu_chosed_msg
if stu_msg == [] and len(stu_chosed_msg) == 0:
print('请选择班级!!!')
tkinter.messagebox.showinfo('提示', '请选择班级!')
else:
count_stu_chosed = 0
class_chosed = self.ddb_acquire.get()
stu_msg = open_excel()[class_chosed]
print('点名名单已重置!\n' + '点名名单:', stu_msg)
stu_chosed_msg = []
self.count.set('已点名人数:%d / %d' % (count_stu_chosed, num_stu)) # 设置内容
self.text.set('')
self.window.update()
def choose(self, event):
# 选中事件
global stu_msg, num_stu, count_stu_chosed
count_stu_chosed = 0
class_chosed = self.ddb_acquire.get()
stu_msg = open_excel()[class_chosed]
print('所选班级的学生名单:', stu_msg)
num_stu = len(stu_msg)
self.count.set('已点名人数:%d / %d' % (count_stu_chosed, num_stu))
self.text.set('')
self.window.update()
def main(self):
""""
主函数负责绘制
:return:
"""
# 下拉框控件
l1 = self.ddb_acquire_L
l4 = self.ddb_acquire
l1.place(relx=0.28, rely=0.05)
l4.place(relx=0.45, rely=0.05, width=200, height=30)
# 绘制学生名字跳动信息
l2 = tk.Label(self.window, fg='red', font=("微软雅黑", 80), textvariable=self.text)
l2.pack()
l2.place(relx=0.35, rely=0.3)
# 绘制点名信息
l3 = tk.Label(self.window, fg='red', font=("微软雅黑", 20), textvariable=self.count)
l3.pack()
l3.place(relx=0.25, rely=0.7, width=400, height=50)
# 重置按钮
btntake2 = tk.Button(self.window, text="重置", bg='black', fg='white', font=("微软雅黑", 20),
command=self.reset)
btntake2.pack()
btntake2.place(x=500, y=650, width=100, height=50)
# 进入循环
self.window.mainloop()
if __name__ == '__main__':
namestudent = NameStudent()
namestudent.main()