Python 3.x Tkinter可见区域?

Python 3.x Tkinter可见区域?,python-3.x,tkinter,Python 3.x,Tkinter,我试图确定Tkinter小部件中的标记是否可见。我知道.yview和.see,但是,在标记的选定文本不可见(脱离当前窗口边框)之前,我不想移动(滚动)屏幕 我的小部件基于它是的Python包装器,它支持tkinter文本小部件的基本方法,如yview和tag,因此任何关于如何在基本tkinter小部件中实现这一点的帮助都将不胜感激 是否有可能确定某些文本是否可见,最好不要直接混淆x和y坐标 我发现.yview()或.yview(节点)为我提供了(0.0,0.17615077926785067)等

我试图确定Tkinter小部件中的标记是否可见。我知道.yview和.see,但是,在标记的选定文本不可见(脱离当前窗口边框)之前,我不想移动(滚动)屏幕

我的小部件基于它是的Python包装器,它支持tkinter文本小部件的基本方法,如yview和tag,因此任何关于如何在基本tkinter小部件中实现这一点的帮助都将不胜感激

是否有可能确定某些文本是否可见,最好不要直接混淆x和y坐标

我发现.yview()或.yview(节点)为我提供了(0.0,0.17615077926785067)等坐标,但是,如果不实际移动屏幕,我无法调用.yview。这可能是通过使用.yview()获取当前可见区域坐标,然后使用.yview(节点)获取当前选择坐标,然后使用.yview_moveto设置旧坐标来实现的,但在此过程中屏幕会明显闪烁,并且我没有得到适当的结果(可能是由于代码中的某些错误)


有什么办法吗?

对于任何给定的索引,您都可以使用
.bbox

如果您需要检查标签,您可以使用
.tag\u ranges
方法获取该标签的所有索引:

def is_tag_showing(text_widget, tag):
    return any(text.bbox(idx) is not None for idx in text.tag_ranges(tag))

尽管值得注意的是,如果标签仅部分显示在屏幕上,则返回True。要检查带有标记的所有文本是否可见,只需将
any
切换为
all

谢谢。不幸的是,tkhtml中的bbox似乎从未生成None或空值。当节点不可见时,bbox值类似于(24811655231182)(man说:前两个整数是边界框左上角的x和y坐标,后两个是同一框右下角的x和y坐标。如果节点不生成内容,则返回空字符串),我可以说这是不可见的,因为1182>1080(我的屏幕分辨率是1920x1080)。也许有比每次检查几何图形更好的方法?
def is_tag_showing(text_widget, tag):
    return any(text.bbox(idx) is not None for idx in text.tag_ranges(tag))