У меня есть Tkinter ScrolledText, заполненный 100 строками текста:

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-ю строку?

enter image description here

0
Basj 21 Дек 2019 в 02:13

1 ответ

Лучший ответ

Текстовый виджет имеет метод с именем see, который выполняет прокрутку до указанного индекса.

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

Из канонической документации по tcl / tk:

Настраивает вид в окне так, чтобы символ, указанный в index , был полностью виден. Если index уже отображается, команда ничего не делает. Если index находится на небольшом расстоянии от поля зрения, команда регулирует вид настолько, чтобы сделать index видимым на краю окна. Если index находится далеко вне поля зрения, тогда центр управления index находится в окне.

1
Bryan Oakley 20 Дек 2019 в 23:38