[Python-Dev] Event loops, PyOS_InputHook, and Tkinter

Michiel Jan Laurens de Hoon mdehoon at c2b2.columbia.edu
Mon Nov 14 01:25:34 CET 2005

Martin v. Löwis wrote:

>Michiel Jan Laurens de Hoon wrote:
>>The problem with threading (apart from potential portability problems) 
>>is that Python doesn't let us know when it's idle. This would cause 
>>excessive repainting (I can give you an explicit example if you're 
>I don't understand how these are connected: why do you need to know
>when Python is idle for multi-threaded applications, and why does not
>knowing that it is idle cause massive repainting?
>Not sure whether an explicit example would help, though; one would
>probably need to understand a lot of details of your application. Giving
>a simplified version of the example might help (which would do 'print
>"Repainting"' instead of actually repainting).
As an example, consider a function plot(y,x) that plots a graph of y as 
a function of x.

If I use threading, and Python doesn't let us know when it's idle, then 
the plot function needs to invalidate the window to trigger repainting. 
Otherwise, the event loop doesn't realize that there is something new to 

Now if I want to draw two graphs:

def f():
    x = arange(1000)*0.01
    y = sin(x)

and I execute f(), then after the first plot(y,x), I get a graph of y 
vs. x with x between 0 and 10 and y between -1 and 1. After the second 
plot, the y-axis runs from -2 to 2, and we need to draw (y,x) as well as 
(2*y,x). So the first repainting was in vain.

If, however, Python contains an event loop that takes care of events as 
well as Python commands, redrawing won't happen until Python has 
executed all plot commands -- so no repainting in vain here.

I agree with you though that threads are a good solution for extension 
modules for which a standard event loop is not suitable, and for which 
graphics performance is not essential -- such as Tkinter (see my next post).


Michiel de Hoon
Center for Computational Biology and Bioinformatics
Columbia University
1150 St Nicholas Avenue
New York, NY 10032

More information about the Python-Dev mailing list