python怎么让电脑说话_利用Windows系统自带的语音接口让电脑说话

先上源代码:

from tkinter import *

import tkinter.messagebox

import pyttsx3

import sys

tk = Tk()

tk.title("Speaker")

L = Label(tk, text="Text to read")

L.grid(row=0, column=0)

T = Text(tk, width=30, height=30)

T.grid(row=1, column=0)

E = Entry(tk)

E.grid(row=2, column=0)

L1 = Label(tk, text="Repeat times")

L1.grid(row=2, column=1)

man = pyttsx3.init()

def say():

text = T.get("0.0", "end")

man.say(text)

man.runAndWait()

def _quit():

cmd = tkinter.messagebox.askyesno("Speaker", "Are you sure you want to quit?")

if cmd:

tk.destroy()

sys.exit()

def delete():

T.delete("0.0", "end")

def loop_speak():

text = T.get("0.0", "end")

for x in range(int(E.get())):

man.say(text)

man.runAndWait()

B = Button(tk, text="Speak", command=say)

B.grid(row=3, column=0)

B1 = Button(tk, text="Loop speak", command=loop_speak)

B1.grid(row=3, column=1)

B2 = Button(tk, text="Clear", command=delete)

B2.grid(row=3, column=2)

tk.protocol("WM_DELETE_WINDOW", _quit)

tk.mainloop()

在运行这个程序之前,我们先要安装pyttsx3模块。安装方法:pip install pyttsx3。

首先,我们先导入了在程序中需要使用的模块。tkinter用于显示图形化用户界面(Graphical User Interface, GUI),tkinter.messagebox用于弹出提示框,pyttsx3用于调用语音接口,sys用于退出程序。

首先,我们先在界面上放置了Text()文本域控件和Label()标签控件及Entry()文本输入框控件。随后,我们初始化了pyttsx3模块,并把pyttsx3这个类复制给变量man。然后,我们定义say()函数。在say()函数中,我们首先使用Text对象的get()方法获取了文本域中的文本,并把文本赋值给text变量。随后,我们使用man.say()让电脑阅读。不过出于某种原因,只有调用man.runAndWait()才会使电脑发出声音,因此我们在这里做了一个调用。

下面我们定义了一个_quit()函数。这个函数的作用是弹出一个提示框,询问用户是否确认要退出。如果用户单击弹出的提示框的“是”按钮,该提示框对象会返回True,如果if cmd:为True,tkinter窗口调用destroy()方法进行销毁,再使用sys.exit()彻底退出程序。

下面是delete()函数。该函数将会调用Text对象的delete()方法,清空文本域中的所有文本。在这里我们把该对象的该方法封装为一个函数,以方便调用。

后面是loop_speak()函数。该函数可以让电脑重复发出声音指定次数。首先,我们先从文本域中获取文本并赋值给text,随后,我们使用for x in range(int(E.get())):循环指定次数。range()函数会产生一个数组,但是比数组更为高效。如果你输入range(3),便会得到[0,1,2],len()该列表,会得到数值3,进而该for循环会循环3次。E.get()函数会返回字符串,因此我们要使用int()函数把这个字符串转换为数字。在for循环的循环体中,我们调用man.say()和man.runAndWait(),以实现循环指定次数。

最后,我们放置一些按钮,并把按钮绑定要触发的函数。同时,我们使用tk.protocol()方法绑定右上角“x“点击事件,如果”x“被点击,则调用_quit()函数。最后,我们使用tk.mainloop()进入窗口主循环,使程序运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值