有没有比我想出的这个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坐标。根据这两个数字,您可以计算出插入点距小部件末端的距离的百分比。