Laurent Reynaud
Laurent Reynaud

Reputation: 23

Python tkinter loading in progress

I would like to know how to display the text "loading in progress" while the final text is loading after pressing the execute button?

import time
import random
import tkinter as tk


def load():
    my_label.config(text="Loading in progress...")  #how to display it?
    my_time = random.randint(1,10)
    time.sleep(my_time)
    my_label.config(text="Loaded!!!")

root = tk.Tk()
root.geometry('300x300')

my_button = tk.Button(root, text='Load', width=20, command=load)
my_button.pack(pady=20)

my_label = tk.Label(root, text='')
my_label.pack(pady=20)


root.mainloop()

Thank you for your answers

Upvotes: 0

Views: 195

Answers (1)

Сергей Кох
Сергей Кох

Reputation: 1723

Use .after instead of sleep in tkinter to avoid blocking the main loop.

import time
import random
import tkinter as tk
from functools import partial

my_time = None

def load(my_time):
    if my_time is None:
        my_time = random.randint(2, 10)
    my_label.config(text=f"Loading in progress...{my_time}")
    my_time -=1
    timer = root.after(1000, load, my_time)
    if not my_time:
        root.after_cancel(timer)
        my_label.config(text="Loaded!!!")


root = tk.Tk()
root.geometry('300x300')

my_button = tk.Button(root, text='Load', width=20, command=partial(load, my_time))
my_button.pack(pady=20)

my_label = tk.Label(root, text='')
my_label.pack(pady=20)

root.mainloop()

Upvotes: 1

Related Questions