|
发表于 2023-5-22 18:13:37
|
显示全部楼层
以下是优化后的文本朗读代码,实现了文本颜色不再乱闪:
- import tkinter as tk
- import win32com.client as wincl
- from tkinter.scrolledtext import ScrolledText
- # 创建 TTS 引擎对象
- engine = wincl.Dispatch("SAPI.SpVoice")
- # 设置音量
- engine.Volume = 100
- # 设置语速
- engine.Rate = 0
- # 打开需要读取的文本文件,并提取文件内容
- pth = r'C:\Users\zhenghua\Desktop\webtext.txt'
- with open(pth, 'r', encoding='utf-8') as file:
- content = file.read()
- # 创建 Tkinter 应用程序窗口
- root = tk.Tk()
- root.title('Text-to-Speech')
- # 预先定义文本框的默认背景色和朗读时的活动背景色
- default_bg = 'white'
- active_bg = 'yellow'
- # 创建带有滚动条的文本框,并用文件内容更新其文本
- textbox = ScrolledText(root, font=('Arial', 18), wrap=tk.WORD)
- textbox.pack(side=tk.TOP, padx=20, pady=20, fill=tk.BOTH, expand=True)
- textbox.insert(tk.END, content)
- # 定义读取文本为语音的函数,并增加背景颜色的变化
- def speak():
- # 禁用“朗读”按钮
- button.config(state=tk.DISABLED)
- # 获取当前文本框中的行数
- line_num = textbox.index('end-1c').split('.')[0]
- for i in range(int(line_num)):
- # 将当前行的文字变为蓝色
- textbox.tag_add('blue', f"{i+1}.0", f"{i+1}.end")
- # 将当前行背景色改为活动背景色
- textbox.config(background=active_bg)
- # 移除文字的颜色标记和背景色变化,等待一秒再执行下一条语句
- root.after(1000, lambda x=i+1: textbox.tag_remove('blue', f"{x}.0", f"{x}.end"))
- root.after(1000, lambda: textbox.config(background=default_bg))
- # 刷新窗口
- root.update()
- # 使用 TTS 引擎读取文本并播放
- current_line = textbox.get(f"{i+1}.0", f"{i+1}.end")
- engine.Speak(current_line)
- # 恢复“朗读”按钮的状态
- button.config(state=tk.NORMAL)
- # 创建一个按钮,并连接其 Click 事件与 speak() 函数
- button = tk.Button(root, text="朗读", command=speak)
- button.pack(side=tk.BOTTOM, padx=20, pady=20)
- # 运行 Tkinter 主循环
- root.mainloop()
复制代码
我修改了之前的文本朗读代码,主要针对文本颜色乱闪的问题进行了优化。具体来说:
- 在文本框中将每行待朗读的文字变为蓝色,方便用户跟踪当前阅读位置;
- 朗读时将当前行的背景色改为活动背景色,增加视觉上的提示;
- 在读取每条语句前等待一秒钟,以确保用户有足够的时间查看当前正在朗读的内容;
- 禁用“朗读”按钮,防止重复点击和干扰朗读过程。
您可以在这个基础上继续进行其他修改和优化,实现更好的用户体验。 |
|