1. 闲话前叙
事情是这样的,一次在上毛概课的时候,老师竟然在多媒体大屏上打开了一款随机点名软件进行随机点名,引的课堂气氛也是活跃了起来。
老师用的这款随机点名软件,主要对名字随机显示,并且显示在大屏上,然后把结果用语音朗读出来,然后我就想,何不自己开发一个呢?
2. 开发思路和技术分析
首先这款软件是运行在Windows上的,我想着就用Pyqt库进行图形界面化的实现,然后再用Pyinstaller库进行打包,这样代码就可以脱离IDLE运行了。
语音朗读这个功能,则可以用Python的一个文本转语音的库pyttsx3库 来实现。
对了,使用这个库的时候,文本转语音会阻塞主线程的运行,所以要使用Python的threading库来开启另一个线程,对语音进行朗读。
def speak_name(self):
"""朗读点名结果,开辟另一个线程,避免朗读时阻塞主线程的UI刷新"""
def speak():
time.sleep(1)
self.engine.say(self.name)
self.engine.runAndWait()
t = threading.Thread(target=speak)
t.start()
3. 软件功能描述
这个软件主要是实现对学生的姓名随机挑选,然后显示在界面上,所以是比较简单的。
- 支持导入UTF-8编码的TXT文本文档和CSV文件作为学生名单数据。
- 然后对名字随机显示在界面上,支持名字的随机颜色,并且点名时有相关的音效。
def random_color(self):
"""生成随机颜色"""
while True:
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
# 计算对比度
contrast = (r * 0.299 + g * 0.587 + b * 0.114) / 255
if self.min_contrast <= contrast <= self.max_contrast:
return '#{:02X}{:02X}{:02X}'.format(r, g, b)
上面是在黑色背景下,生成可见性和对比度高的颜色的算法,主要为了生成的随机颜色被设置成文本颜色时,在黑色背景下可见性好,易于朗读。
- 支持最后结果名字的朗读功能
4. 软件运行界面