[wxPython-users] calling wxPython functions from different thread

A.J. Bonnema abonnema at xs4all.nl
Mon Feb 11 09:30:05 PST 2008


Jacek Poplawski wrote:
> hello again,
> 
> I was trying to make my application multithreaded, I put my calculations 
> in different Thread, then I gave this Thread name of the function to 
> call when it finish.
> This function updates ListCtrl.
> So it works this way:
> 
> - ListCtrl has old values
> - I want to add new element, it requires calculations
> - I call different thread and give it reference to Update() function
> - I do different things while thread does its calculations
> - thread finishes calculations and calls Update()
> - Update() regenerates data in ListCtrl
> 
> The problem is, that my GUI is unstable after last step. ListCtrl is not 
> updated until I use scroll, then it updates, but I can't click anything 
> else in the wxPython window.

Hi Jacek,

 From the "wxPython in Action": the GUI bit is not threadsafe. You 
should not call any function of the GUI from a thread. Any GUI function 
can *only* be called from the main thread or you will have trouble. And 
it will be hard to diagnose.

As soon as you call update() from your thread, the update-function runs 
in the thread and the GUI becomes unstable. Dont.

I suppose you could use Queue objects, but I have no experience doing so.
What you would do is: post to the queue from the thread and read from 
the queue from the main thread. Does that make any sense?

Guus.
-- 
A.J. Bonnema, Leiden The Netherlands,
user #328198 (Linux Counter http://counter.li.org)





More information about the wxpython-users mailing list