首页 > 解决方案 > Tkinter ScrolledText,将光标移动到给定行时如何自动更新滚动条?

问题描述

我有一个ScrolledText装满 100 行文本的 Tkinter:

import tkinter, tkinter.scrolledtext
root = tkinter.Tk('test')
text = tkinter.scrolledtext.ScrolledText(master=root, wrap='none')
text.pack(side="top", fill="both", expand=True, padx=0, pady=0)
text.insert(tkinter.END, ''.join("hello%i\n" % i for i in range(100)))
text.mark_set("insert", "1.1")  # cursor position at the start
text.focus()
root.mainloop()

将光标移动到第 50 行时:

text.mark_set("insert", "50.1")

光标确实移动到那里,但滚动条没有相应地更新。

问题:如何在光标位置移动到第n行时自动更新滚动条位置?

在此处输入图像描述

标签: pythontkintertextbox

解决方案


文本小部件有一个名为的方法see,它将滚动到给定的索引。

text.mark_set("insert", "50.1")
text.see("insert")

从规范的 tcl/tk 文档:

调整窗口中的视图,使index给出的字符完全可见。如果index已经可见,则该命令不执行任何操作。如果index在视图外很短的距离,则该命令会调整视图以使index在窗口边缘可见。如果索引远在视野之外,则命令中心索引在窗口中。


推荐阅读