文本–>语音转换器
本项目是一个简单的从文本到语音这样一个转换器的图形用户界面应用,使用了Python
的tkinter
库来构建界面,以及pyttsx3
库来执行转换。以下是对该项目代码的详细解释,后面会附上本项目的完整代码:
实现效果:
一:导入模块
import pathlib
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.filedialog as filedialog
import tkinter.messagebox as msgbox
import pyttsx3
pathlib
: 用于处理文件系统路径的面向对象的模块。tkinter
: Python的标准GUI库。filedialog
: 用于在GUI中打开文件对话框。messagebox
: 用于在GUI中显示消息框。pyttsx3
: 一个TTS库,可以将文本转换为语音。
二:定义Application
类
class Application(tk.Tk):
...
这个类继承自tk.Tk
,表示它是一个tkinter
窗口应用。
三:__init__
方法
def __init__(self):
...
这是类的初始化方法。在这里,设置了窗口的标题、大小、图标,并初始化了pyttsx3
引擎和一个字符串变量self.file_path
用于存储选择的文本文件的路径。最后,它调用self.init_ui()
来初始化用户界面。
四:init_ui
方法
def init_ui(self):
...
这个方法负责构建GUI
。它创建了一个标签框架(LabelFrame
)用于包含文本文件相关的控件,包括一个用于输入文件路径的Entry
控件和一个 “选择” 按钮来触发文件的选择对话框。还添加了一个“转换为 MP3
”按钮来触发从文本到语音的转换。
五:select_file
方法
def select_file(self):
...
当用户点击“选择”按钮时,这个方法会被调用。它使用filedialog.askopenfile
打开一个文件选择对话框,并让用户选择一个文本文件。如果用户选择了一个文件,它会更新self.file_path
字符串变量以存储文件的路径。
六:convert_to_mp3
方法
def convert_to_mp3(self):
...
当用户点击“转换为 MP3
”按钮时,这个方法会被调用。它首先使用pathlib.Path
处理文件路径,然后读取文件内容。接着,它使用pyttsx3
引擎的save_to_file
方法将文本内容转换为MP3
文件,文件名与原始文本文件相同但扩展名为.mp3
。最后,它显示一个消息框来通知用户文件已成功转换。
七:主程序
if __name__ == "__main__":
app = Application()
app.mainloop()
这是Python程序的入口点。它创建一个Application
类的实例并启动其事件循环,从而显示GUI
窗口并等待用户交互。待退出程序后,MP3
文件会自动生成。
本项目完整源码
import pathlib
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.filedialog as filedialog
import tkinter.messagebox as msgbox
import pyttsx3
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("文本->语音转换器")
self.geometry("600x320")
self.iconbitmap("favicon.ico")
self.engine = pyttsx3.init()
self.file_path = tk.StringVar()
self.init_ui()
def init_ui(self):
self.row1 = tk.LabelFrame(self, text="文本文件")
self.txt_path = tk.Entry(self.row1, textvariable=self.file_path)
self.txt_path.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5, pady=5)
self.btn_sel = tk.Button(self.row1, text="选择", command=self.select_file)
self.btn_sel.pack(side=tk.RIGHT, pady=5, padx=5)
self.row1.pack(fill=tk.X, padx=5, pady=5)
self.btn_convert = tk.Button(self, text="转换为 MP3", command=self.convert_to_mp3)
self.btn_convert.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
def select_file(self):
txt_file = filedialog.askopenfile(initialdir=".", title="选择文件", filetypes=(('文件文件', '*.txt'),('所有文件', '*.*')))
if txt_file:
self.file_path.set(txt_file.name)
def convert_to_mp3(self):
filename = pathlib.Path(self.file_path.get())
with open(filename, 'r', encoding='utf8') as f:
self.engine.save_to_file(f.read(), f"{filename.stem}.mp3")
self.engine.runAndWait()
msgbox.showinfo("转换结果", "文件转换成功!")
if __name__ == "__main__":
app = Application()
app.mainloop()
ndWait()
msgbox.showinfo("转换结果", "文件转换成功!")
if __name__ == "__main__":
app = Application()
app.mainloop()