【小工具】分享一个课堂老师点名的小工具

声明:原创,但很菜;仅供小白学习、有兴趣的老师点名使用
直接可以使用的工具:
链接: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()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值