You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:44:58