I am trying to write a threaded applet with PyGTK, starting up a thread to get data off the Internet without blocking the UI.
Here is a simple example of the type of threading I am trying to do:
#!/usr/bin/python import gtk, gnome, gnome.applet, thread
def do_thread_cb(mutable): mutable[0] = "Success!"
def set_label_cb(mutable, widget): widget.set_text(mutable[0])
def applet_factory(applet, iid): gtk.gdk.threads_init() label = gtk.Label("trying...") applet.add(label) applet.show_all() mutable = ["failed"] gtk.timeout_add(1000, set_label_cb, mutable, label) thread.start_new_thread(do_thread_cb, (mutable, )) return gtk.TRUE
gnome.applet.bonobo_factory("OAFIID:GNOME_TestApplet_Factory", gnome.applet.Applet.__gtype__, "hello", "0", applet_factory)
The problem is that while this runs fine, when I try to remove the applet from the panel using the right-click menu, I get an error dialog and:
Fatal Python error: PyThreadState_Get: no current thread
I tried moving the gtk.gdk.threads_init() to the main body of the applet (before gnome.applet.bonobo_factory) but in that case the thread seems not to run at all.
Has anyone successfully created a threaded applet with PyGtk? Am I doing
something wrong here?
I've not done much stuff with python and threading, but I'm kind of interested in pyorbit (which of course the bonobo stuff uses). There is a bug, #126477 pyORBit and threading, that indicates the pyorbit and threading doesn't work so well. Recently I attached a patch which might do something to help (I didn't test it very hard but it worked for me). You might want to try applying the patch to pyorbit and see what happens.
-- Bowie Owens
CSIRO Mathematical & Information Sciences phone : +61 3 9545 8055 fax : +61 3 9545 8080 mobile : 0425 729 875 email : [EMAIL PROTECTED]
_______________________________________________ pygtk mailing list [EMAIL PROTECTED] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/
