Eliminating freezes with after() and update_idletasks ()

To better understand the use of these widget methods, we'll build a simple application that uses after() and update() to keep the UI responsive during a long-running task.

This is our initial application:

import tkinter as tk from time import sleep class App(tk.Tk): def __init__(self): super().__init__() self.status = tk.StringVar() tk.Label(self, textvariable=self.status).pack() tk.Button(self, text="Run Process", command=self.run_process).pack() def run_process(self): self.status.set("Starting process") for phase in range(1, 5): self.status.set(f"Phase {phase}") self.process_phase(phase, 2) self.status.set('Complete') def process_phase(self, n, length): # some kind of heavy processing ...

Get Python GUI Programming with Tkinter now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.