我做了我的ScrolledText
自动滚动到最后,基于这个答案.
现在我想自动滚动only if用户是不手动滚动.
我一直在寻找这样的东西:self.text.offsetBottom
(请参阅下面代码中我的评论),但还没找到。
有任何想法吗?谢谢!
import time
from Tkinter import *
import ScrolledText
class Example(Frame):
def __init__(self, *args, **kwargs):
Frame.__init__(self, *args, **kwargs)
self.text = ScrolledText.ScrolledText(self, height=6, width=40)
self.text.pack(side="left", fill="both", expand=True)
self.add_timestamp()
def add_timestamp(self):
self.text.insert("end", time.ctime() + "\n")
""" -----> HERE <----- """
# if self.text.offsetBottom > 0:
self.text.see("end")
self.after(1000, self.add_timestamp)
if __name__ == "__main__":
root =Tk()
frame = Example(root)
frame.pack(fill="both", expand=True)
root.mainloop()
您可以使用yview()
方法来查看小部件是否完全向下滚动。yview()
返回一个 2 元组,其中可见部分的顶部和底部相对于总大小。因此,如果小部件完全向下滚动,第二个数字应该是1.0
.
我们可以使用它来仅在插入发生之前小部件完全向下滚动时滚动:
def add_timestamp(self):
fully_scrolled_down = self.text.yview()[1] == 1.0
self.text.insert("end", time.ctime() + "\n")
if fully_scrolled_down:
self.text.see("end")
self.after(1000, self.add_timestamp)
另一种选择是检查最后一个字符当前是否可见或不使用
visible = self.text.bbox("end-1c")
From effbot,我们可以看出,如果字符可见,则该方法给出一个 4 元组,或者None
如果该字符不可见:
框(索引)
计算给定字符的边界框。
此方法仅在文本小部件更新时才有效。为了确保这种情况,您可以先调用 update_idletasks 方法。
index
字符索引。
返回:
4 元组(x、y、宽度、高度),如果字符不可见,则为 None。
我们可以使用它仅在插入发生之前最后一个字符可见时滚动:
def add_timestamp(self):
last_char_visible= self.text.bbox("end-1c")
self.text.insert("end", time.ctime() + "\n")
if last_char_visible:
self.text.see("end")
self.after(1000, self.add_timestamp)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)