deferred because of thatcanvas update must be called to redraw the screen after each moveor else updates don' appear until the entire movement loop callback finishes and returns this is classic long-running callback scenariowithout manual update callsno new gui events are handled until the callback returns in this scheme (including both new user requests and basic window redrawsby using the widget after method to schedule multiple move operations to occur every few milliseconds because this approach is based upon scheduled events dispatched by tkinter to your handlersit allows multiple moves to occur in parallel and doesn' require canvas update calls you rely on the event loop to run movesso there' no reason for sleep pausesand the gui is not blocked while moves are in progress by using threads to run multiple copies of the time sleep pausing loops of the first approach because threads run in parallela sleep in any thread blocks neither the gui nor other motion threads as described earlierguis should not be updated from spawned threads in generalbut some canvas calls such as move seem to be thread-safe today in the current tkinter implementation of these three schemesthe first yields the smoothest animations but makes other operations sluggish during movementthe second seems to yield slower motion than the others but is safer than using threads in generaland the second and third allow multiple objects to be in motion at the same time using time sleep loops the next three sections demonstrate the code structure of all three approaches in turnwith new subclasses of the canvasdraw example we met in example - earlier in this refer back to that example for its other event bindings and basic drawmoveand clear operationsherewe customize its object creators for tags and add new event bindings and actions example - illustrates the first approach example - pp \gui\tour\canvasdraw_tags py ""add tagged moves with time sleep (not widget after or threads)time sleep does not block the gui event loop while pausingbut screen not redrawn until callback returns or widget update callcurrently running onmove callback has exclusive attention until it returnsothers pause if press 'ror 'oduring move""from tkinter import import canvasdrawtime class canvaseventsdemo(canvasdraw canvaseventsdemo)def __init__(selfparent=none)canvasdraw canvaseventsdemo __init__(selfparentself canvas create_text( text='press and to move shapes'self canvas master bind(''self onmoveovalstime toolsthreadsand animation