内容更改时停止文本小部件滚动

2024-10-03 00:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有滚动条的文本小部件,它看起来像这样:

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次:

^{pr2}$

问题是,当我尝试滚动时,它会一直将我向后滚动到顶部(大概每秒4次)。我想这是因为所有内容都被删除了。在

我如何防止它自动滚动,或者在内容发生变化时“向后”滚动?在


Tags: text文本self内容部件configurerootcommand
2条回答

每次更新之后,您可以使用文本小部件的yview方法将跳转到小部件的底部。另外,为了防止用户在滚动时跳转,您可以做一个简单的检查,确保滚动条已经在底部(a.k.a用户没有滚动)。在

if self.myWidgetScrollbar.get() == 1.0:
    self.myWidget.yview(END)

您可以保护位置,并在更新后将其设置回原处,如下面的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代码看起来很相似,类似于:

^{pr2}$

不知道为什么需要在中间使用get(),可能是为了强制查找,但它是有效的。在

相关问题 更多 >