如何让Tkinter窗口兼容Windows讲述人功能?
让Windows讲述人朗读Tkinter控件内容的解决方案
核心思路:无需OCR,利用系统辅助功能
Windows讲述人针对标准UI控件(如Tkinter的Label),可以通过系统的辅助功能框架直接读取控件的文本内容,无需依赖OCR工具。OCR仅适用于无法被系统识别的图像类文本,而你的Tkinter控件本身携带文本信息,只需要让控件正确暴露这些信息给系统辅助功能即可。
纯Tkinter实现方案
默认的Tkinter控件在Windows上可能没有完全开启辅助功能支持,你可以通过以下方式优化:
- 使用
ttk控件替代原生Tkinter控件ttk(主题化Tkinter)控件对Windows辅助功能的支持更好,讲述人可以直接识别其文本内容。修改后的代码如下:
import tkinter as tk from tkinter import ttk root = tk.Tk() root.title("Test") # 使用ttk.Label替代原生Label lbl = ttk.Label(root, text="A label") lbl.grid() root.mainloop()
当鼠标悬停在这个ttk.Label上时,Windows讲述人会自动朗读其文本内容。
- 为原生Tkinter控件设置焦点支持
如果坚持使用原生Tkinter控件,可以开启控件的takefocus属性,让系统辅助功能识别到它:
import tkinter as tk root = tk.Tk() root.title("Test") lbl = tk.Label(root, text="A label", takefocus=True) lbl.grid() # 绑定鼠标悬停事件,让控件获得焦点 def on_enter(event): event.widget.focus_set() lbl.bind("<Enter>", on_enter) root.mainloop()
当鼠标悬停时,Label获得焦点,Windows讲述人会读取其文本。
关于Windows讲述人自带OCR的说明
如果你的应用中有无法被系统识别的图像类文本(比如自定义绘制的文字),可以使用Windows讲述人自带的OCR功能:按下Win + Ctrl + C,讲述人会识别当前屏幕选中区域的文字并朗读。但这种方式是手动触发的,无法自动在鼠标悬停时执行,且仅适用于图像文本场景,对于标准控件来说不是最优解。
内容的提问来源于stack exchange,提问作者About_to_give_up
相关产品推荐
相关产品推荐

