ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 实现点名系统

2021-09-05 23:35:18  阅读:368  来源: 互联网

标签:False 点名 Python text 系统 学生名单 speech tkinter root


安装扩展库pywin32和speech,然后修改一下speech.py文件使得适用于Python 3.x。

 

步骤1:安装pywin32

在命令行模式运行:

pip install pywin32

安装出现超时错误,如下:

 

 pip --default-timeout=1000 install -U pywin32 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

 

步骤2:安装扩展库speech

安装扩展库speech

pip3 install speech

 

然后修改speech.py 文件使得适用于Python 3.x,重点修改之处如图,

 

 

 改为:

 

 

 

改为:

 

 

 

改为:

 

步骤3:

 

准备一个文本文件,保存学生信息,如图

学生名单.txt

20210223,张三

20210224,李四

20210225,王五

20210226,赵六

20210227,周七

20210228,钱八

 

 

源代码如下:

 

import tkinter
from tkinter.messagebox import showinfo
from time import sleep
from random import shuffle
from itertools import cycle
from threading import Thread
try :
    from speech import say
    has_speech = True
except:
    has_speech = False
root = tkinter.Tk() #窗口标题
root.title('随机提问')#窗口初始大小和位置
root.geometry( '260x180+400+300')#不允许改变窗口大小
root.resizable(False,False)
#关闭程序时执行的函数代码,停止滚动显示学生名单
def closewindow( ):
    if rolling.get():
        showinfo('不能关闭','请先停止名单滚动')
        return
    root.destroy()
root.protocol('WM_DELETE_WINDOw' , closewindow)
#读取学生名单,如果不存在文件就使用模拟数据try :
try:
    with open( '学生名单.txt' , encoding='utf8 ' ) as fp:
        students = fp.read( ).splitlines()
except:
    showinfo('学生名单不存在',
        '当前目录中没有文件:学生名单.txt\n临时使用模拟数据')
    students =['张三','李四','王五','赵六','周七','钱八']
#变量,用来控制是否滚动显示学生名单
rolling = tkinter.BooleanVar(root, value=False)


def switch():
    rolling.set(True)
    #随机打乱学生名单
    t = students[ : ]
    shuffle(t)
    t = cycle(t)

    while rolling.get():
        # 滚动显示
        lbFirst[ 'text'] = lbSecond[ 'text' ]
        lbSecond[ 'text'] = lbThird[ 'text']
        lbThird[ 'text'] = next(t)
        #数字可以修改,控制滚动速度
        sleep(0.1)

def btnStartClick():
    # 每次单击“开始”按钮启动新线程
    Thread(target=switch).start()
    btnStart[ 'state' ] = 'disabled'
    btnStop[ 'state' ] = 'normal'
btnStart = tkinter.Button( root,
    text='开始',
    command=btnStartClick)
btnStart.place(x=30,y=10,width=80,height=20)
saying = tkinter.BooleanVar(root, value=False)
def say_name():
    while has_speech and saying.get():
        say(f"请{lbSecond[ 'text ' ].replace( ' ,','')}回答问题")


def btnStopClick():
    #单击“停”按钮结束滚动显示rolling.set(False)
    sleep(0.3)
    saying.set(True)
    Thread(target=say_name).start()
    showinfo('恭喜','本次中奖: '+lbSecond[ 'text' ])
    saying.set(False)
    btnStart[ 'state' ] = 'normal'
    btnStop[ 'state' ] = 'disabled'
btnStop = tkinter.Button(root,text='停', command=btnStopClick)
btnStop[ 'state'] = 'disabled'
btnStop.place(x=150,y=10, width=80,height=20)
#用来滚动显示学生名单的3个Label组件
#可以根据需要进行添加,但要修改上面的线程函数代码
lbFirst = tkinter.Label(root, text='')
lbFirst.place(x=80, y=60, width=100,height=20)
#红色Label组件,表示中奖名单
lbSecond = tkinter.Label(root,text='')
lbSecond[ 'fg' ] = 'red'
lbSecond.place(x=80,y=90,width=100,height=20)
lbThird = tkinter.Label(root,text='')
lbThird.place(x=80,y=120,width=100,height=20)
#启动tkinter主程序
root.mainloop()

 

 

 

来自:

 

标签:False,点名,Python,text,系统,学生名单,speech,tkinter,root
来源: https://www.cnblogs.com/emanlee/p/15231651.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有