import pathlib
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.filedialog as filedialog
import tkinter.messagebox as msgbox #messagebox的工具函数是只要标题和提示区即可
import pyttsx3
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("text2MP3")
self.geometry("300x120") #设置窗口的大小和位置 需要一个字符串参数
self.iconbitmap() #图标
self.engine = pyttsx3.init() #初始化语音库
self.file_path = tk.StringVar() #应付对控件的文字内容实时更改的需求
self.UI()
def UI(self):
self.row1 = tk.LabelFrame(self,text="文本文件") #绘制一个边框和标题
self.row1.pack(fill=tk.X, padx=5, pady=5)
self.text_path = tk.Entry(self.row1,textvariable=self.file_path) #Entry用于获取用户的输入文本
self.text_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.btn_convert = tk.Button(self, text="转换为 MP3", command=self.convert2mp3)
self.btn_convert.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
def select_file(self):
#调用askopenfile方法获取单个打开的文件
txt_file = filedialog.askopenfile(initialdir=".", title="选择文件",
filetypes=(('文件文件', '*.txt'), ('所有文件', '*.*')))
#filetypes文件类型
#print(txt_file) #<_io.TextIOWrapper name='C:/Users/bohs/Desktop/新建文本文档.txt' mode='r' encoding='cp936'>
if txt_file:
self.file_path.set(txt_file.name)
def convert2mp3(self):
filename = pathlib.Path(self.file_path.get()) #pathlib是Python标准库中的一个模块,它提供了一组面向对象的文件系统路径操作
#print(filename) #C:\Users\bohs\Desktop\新建文本文档.txt
#print(filename.stem) #新建文本文档
#pathlib.Path()是pathlib模块中的核心类,表示一个文件系统路径
with open(filename, 'r', encoding='utf8') as f:
self.engine.save_to_file(f.read(), f"{filename.stem}.mp3") #engine.save_to_file()将语音输出保存为音频文件
self.engine.runAndWait()
msgbox.showinfo("转换结果", "文件转换成功!") #弹框
if __name__ == "__main__":
app = Application() #根窗口的实例(root窗口)
app.mainloop() #窗口的主事件循环,必须有
01-02
893
05-26
1万+
09-26
1198