Tkinter's event queue
As we discussed in Chapter 11, Creating Automated Tests with unittest, many tasks in Tkinter, such as drawing and updating widgets, are done asynchronously rather than taking immediate action when called in code. More specifically, the actions you perform in Tkinter, such as clicking a button, triggering a key bind or trace, or resizing a window, place an event in the event queue. On each iteration of the main loop, Tkinter pulls all outstanding events from the queue and processes them one at a time. For each event, Tkinter executes any tasks (that is, callbacks or internal operations like redrawing widgets) bound to the event before proceeding to the next event in the queue.
Tasks are roughly prioritized by Tkinter as either regular or do-when-idle (often referred to as idle tasks). During event processing, regular tasks are processed first, followed by idle tasks when all the regular tasks are finished. Most drawing or widget-updating tasks are classified...