我有一个带有滚动条的文本小部件,看起来像这样:
self.myWidget = Text(root)
self.myWidget.configure(state=DISABLED)
self.myWidget.pack()
self.myWidgetScrollbar = Scrollbar(root, command=self.myWidget.yview)
self.myWidget.configure(yscrollcommand=self.myWidgetScrollbar.set)
self.myWidgetScrollbar.pack(side=LEFT,fill=Y)
文本小部件每秒更新 4 次:
self.myWidget.configure(state=NORMAL)
self.myWidget.delete(1.0, END)
self.myWidget.insert(END, "\n".join(self.listWithStuff))
self.myWidget.configure(state=DISABLED)
问题是,当我尝试滚动时,它会不断将我滚动回顶部(可能每秒 4 次)。我认为这是因为所有内容都被删除了。
如何防止它自动滚动,或者在内容更改时可能“向后”滚动?
您可以保护该位置并在更新后将其设置回来,就像以下 Tcl 代码所做的那样:
proc update_view {w s data} {
# store position
set pos [$s get]
$w configure -state normal -yscrollcommand {}
$w delete 1.0 end
$w insert end $data
$w configure -state disabled -yscrollcommand [list $s set]
$s get
$s set {*}$pos
}
Tkinter 代码看起来类似,如下所示:
def update_view(self, data):
pos = self.myWidgetScrollbar.get()
self.myWidget.configure(yscrollcommand=None, state=NORMAL)
self.myWidget.delete(1.0, END)
self.myWidget.insert(END, data)
self.myWidget.configure(yscrollcommand=self.myWidgetScrollbar.set, state=DISABLED)
self.myWidgetScrollbar.get()
self.myWidgetScrollbar.set(pos)
不知道为什么需要中间的 get() ,也许是为了强制进行一些查找,但它有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)