gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:53:03 25 4
gpt4 key购买 nike

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

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(),可能是为了强制进行一些查找,但它确实有效。

关于python - 内容更改时停止文本小部件滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com