先上源代码:
import pygame
from pygame.locals import *
import sys
import threading
import pyttsx3
import time
man = pyttsx3.init()
def overheatSpeak():
while True:
man.say("Overheat!")
man.runAndWait()
time.sleep(1)
thread = threading.Thread(target=overheatSpeak)
thread.start()
pygame.mixer.init()
pygame.init()
window = pygame.display.set_mode((500, 500))
pygame.display.set_caption("Overheat Alarm")
myfont = pygame.font.Font(None, 40)
white = (255, 255, 255)
blue = (0, 0, 255)
textImage = myfont.render("Overheat!", True, white)
pygame.mixer.music.load("alarm.mp3")
pygame.mixer.music.play(loops=-1, start=0.0)
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
window.fill(blue)
window.blit(textImage, (200, 250))
pygame.display.update()
在执行该程序之前,需要先使用pip install pygame安装pygame模块。
首先,我们先使用一系列import语句导入一些模块。pygame和pygame.locals用于显示pygame画布以及”Overheat”字样。sys模块用于退出程序,threading模块用于创建一个线程,让电脑朗读”Overheat”,pyttsx3用于调用语音接口,time模块用于在朗读后将线程暂时挂起,以便在警报声的空当中朗读。
后面,我们首先创建overheatSpeak()函数。该函数的函数体为一个while True:死循环,使用man.say()和man.runAndWait()让电脑进行朗读操作,并且调用time.sleep()让线程挂起1秒钟,以便在警报声的空当进行朗读。随后,我们使用threading.Thread()创建一个线程对象,命名为thread,再使用thread.start()使该线程对象运行。
下面,我们就该使用pygame模块进行画布创建和绘制以及警报声的播放了。首先,我们使用pygame.init()初始化pygame主模块,并使用pygame.mixer.init()模块初始化pygame的音频模块。随后,我们创建一个画布,命名为window,使用pygame.display.set_mode()函数设置画布的长、宽均为500。随后,我们使用pygame.display.set_caption()设置窗口的标题为”Overheat alarm”。随后,我们定义一种字体,命名为myfont。我们使用None表示使用默认字体,使用40表示把字体大小设置为40。随后,为了方便使用,我们把白色和蓝色以RGB格式使用元组形式提前进行声明。然后,我们使用myfrot.render()函数提前对字体进行渲染。第一个参数为字符串类型,表示文本内容,第二个参数为布尔值,表示是否使用抗锯齿。True为使用,False为不使用。之后,我们使用pygame.mixer.music.load()函数加载音频文件,并且使用pygame.mixer.music.play()进行播放。我们把loops设为-1,starts设为0.0。这样做可以实现无限循环播放,并且播放完一遍后从音乐头部开始。
后面,我们就进入了pygame窗口主循环。我们使用一个for语句获取窗口接收到的pygame事件。如果接收到的事件类型为QUIT,即用户单击了窗口右上方的“X”,程序就会调用sys.exit()函数以退出程序。
后面,我们使用window.fill()函数将背景绘制为蓝色,以及windows.bilt()函数把提前渲染好的文本绘制到画布上去。后面元组中的两个数字分别为x坐标和y坐标。最后,我们使用pygame.display.update()函数更新画布。