Tkinter可见区域?

时间:2016-03-18 04:30:34

标签: python-3.x tkinter

我试图确定Tkinter小部件中的标签是否可见。我知道.yview和。然而,我不想移动(滚动)屏幕,直到所选标记的文本不可见(关闭当前窗口边框)。

我的小部件基于tkinterhtml,它是tkhtml的Python包装器,它支持tkinter文本小部件的基本方法,如yview和tag,所以有关如何在基本tkinter小部件中执行此操作的任何帮助非常感谢。

是否可以确定某些文本是否可见,而不是直接使用x和y坐标?

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

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:1)

对于任何给定的索引,您都可以使用.bbox If the character is not visible, returns None.

if text.bbox("end") is None:
    print("not at bottom yet")
else:
    print("at the bottom")

如果您需要检查标记,则可以使用.tag_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

相关问题