Прокрутка текстового поля при добавлении текста
Как "прикрутить" автоматическую прокрутку полоски по мере появления текста, то есть чтоб полоска шла вниз как только текст появляется?
Вот код:
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()