besides canvas-based animationswidget configuration tools support variety of animation effects for exampleas we saw in the flashing and hiding alarm scripts earlier (see example - )it is also easy to change the appearance of other kinds of widgets dynamically with after timer-event loops with timer-based loopsyou can periodically flash widgetscompletely erase and redraw widgets and windows on the flyreverse or change widget colorsand so on see "for good time on page for another example in this category which changes fonts and colors on the fly (albeitwith questionable ergonomic intentionsthreads and animation techniques for running long-running tasks in parallel threads become more important if animations must remain active while your program waits for instanceimagine program that spends minutes downloading data from networkcalculating the output of numeric modelor performing other long-running tasks if such program' gui must display an animation or otherwise show progress while waiting for the taskit can do so by either altering widget' appearance or by moving objects in canvas periodically--simply use the after method to wake up intermittently to modify the gui as we've seen progress bar or counterfor instancemay be updated during after timer-event handling in additionthoughthe long-running task itself will likely have to be run in spawned parallel thread so that your gui remains active and performs the animation during the wait otherwiseno gui updates will occur until the task returns control to the gui during after timer-event processingthe main gui thread might check variables or objects set by the long-running task' thread to determine completion or progress especially if more than one long-running task may be active at the same timethe spawned thread might also communicate with the gui thread by storing information in python queue objectto be picked up and handled by the gui during after events for generalitythe queue might even contain function objects that are run by the gui to update the display againwe'll study such threaded gui programming and communication techniques in and employ them in the pymailgui example later in the book for nowkeep in mind that spawning computational tasks in threads can allow the gui itself to both perform animations and remain active in general during wait states graphics and gaming toolkits unless you stopped playing video games shortly after the ascent of pongyou probably also know that the sorts of movement and animation techniques shown in this and book are suitable for some simple game-like programsbut not all for more demanding taskspython also has additional graphics and gaming support we haven' studied here tkinter tourpart