插入后获取Tkinter Text小部件的总显示行的最有效方法是什么? - python

有没有比我想出的这个makeshift函数更有效的方法来获取插入文本后tkinter Text小部件中剩余的显示行总数(不仅仅是可见行)(在Python 3.4中。 2):

def get_display_lines():
    #Gets the total number of display lines after the text insert in the current tab (not just those on-screen, though).
    myTextWidget.mark_set("dlines", INSERT)
    count=0
    while 1:
        if myTextWidget.compare("dlines", ">=", "end-1c linestart"):
            break
        else:
            myTextWidget.mark_set("dlines", "dlines + 1 display line")
            count+=1
    return count

无论如何,这段代码可以工作,但是效率很低。我正在使用它来计算剩余文档自动滚动所需的时间。使用箭头键移动文本插入时,效率低下会导致问题(调用此函数以便显示当前的准确时间)。这会使插入插件的移动速度变慢,更新的速度也变慢,甚至可能使其崩溃/冻结。

我知道有更多更有效的方法来获取“文本”小部件中的总行数。但是,我需要显示行,因为使用自动滚动阅读通常是在自动换行的情况下完成的。

我的自动滚动功能从插入到用户选择的每隔几秒钟的行数就下降了(该秒数也由用户选择)。这不是通过滚动条来完成的。

python大神给出的解决方案

如果您只关心滚动文档的时间,并且滚动时数据没有变化(即:未添加新行),则只需计算文档占用的像素数(您可以只需执行一次),以及您当前在文档中的位置。这将告诉您还剩多少像素。据此,您应该能够估算出将花费多少时间。

您可以使用myTextWidget.count("1.0", "end", "ypixels"获取文本小部件中使用的像素总数。然后,您可以使用myTextWidget.dlineinfo("insert")获取当前行的y坐标。根据这两个数字,您可以计算出插入点距小部件末端的距离的百分比。