Прокрутка текстового поля при добавлении текста

Как "прикрутить" автоматическую прокрутку полоски по мере появления текста, то есть чтоб полоска шла вниз как только текст появляется?

Вот код:

from tkinter import *
import time
import threading

def start_tk():
        root = Tk()
        scrollbar = Scrollbar(root)
        scrollbar.pack( side = RIGHT, fill = Y )

        mylist = Listbox(root, yscrollcommand = scrollbar.set )
        mylist.pack( side = LEFT, fill = BOTH )
        scrollbar.config( command = mylist.yview )

        def insert_in_widget():
                for line in range(100):
                   time.sleep(0.1)
                   mylist.insert(END, "This is line number " + str(line))

        insert_in_widget_thread = threading.Thread(target=insert_in_widget)
        insert_in_widget_thread.start()


        mainloop()



start = threading.Thread(target=start_tk)

start.start()

Ответы (1 шт):

Автор решения: insolor

После вставки текста делайте mylist.yview(END) или mylist.yview_moveto(1.0), тогда будет прокручиваться в самый низ текстового поля:

def insert_in_widget():
    for line in range(100):
        time.sleep(0.1)
        mylist.insert(END, "This is line number " + str(line))
        mylist.yview(END)
        # или mylist.yview_moveto(1.0)

Вообще, не стоит оборачивать основной код tkinter в отдельный поток, выполняйте в отдельном потоке только блокирующий цикл:

from tkinter import *
import time
import threading


root = Tk()
scrollbar = Scrollbar(root)
scrollbar.pack( side = RIGHT, fill = Y )

mylist = Listbox(root, yscrollcommand = scrollbar.set )
mylist.pack( side = LEFT, fill = BOTH )
scrollbar.config( command = mylist.yview )

def insert_in_widget():
    for line in range(100):
        time.sleep(0.1)
        mylist.insert(END, "This is line number " + str(line))
        mylist.yview(END)

insert_in_widget_thread = threading.Thread(target=insert_in_widget)
insert_in_widget_thread.start()

mainloop()
→ Ссылка