Вывод данных tkinter

Есть код:

from tkinter import *

root = Tk()

def get_range():
    for i in range(1, 100000):
        Label(root, text=i).pack()

Button(root, text='Click', command=get_range).pack()
root.mainloop()

При нажатии кнопки на форме происходит "зависание" до выполнения функции, однако необходимо выводить данные постепенно (после выполнения каждой итерации цикла).


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

Автор решения: S. Nick

Вы не можете использовать цикл, потому что он останавливает mainloop. Вы можете использовать root.after для вызова функции через n мс.

import tkinter as tk

def get_range(count):
    # изменить текст в метке
    label['text'] = count                     

    if count > 0:
        # Обратный отсчет через каждые 100 мс
        root.after(100, get_range, count-1)

root = tk.Tk()

label = tk.Label(root)
label.place(x=35, y=35)
button = tk.Button(root, text='Click', command=lambda i=100000: get_range(i)).pack()

root.mainloop()

введите сюда описание изображения

→ Ссылка
Автор решения: Дмитрий
from tkinter import *
import threading

root = Tk()

def get_range():
    for i in range(1, 100000):
        Label(root, text=i).pack()

t = threading.Thread(target=get_range)

Button(root, text='Click', command=t.start).pack()
root.mainloop()
→ Ссылка