V�ctor M. Hern�ndez Rocamora wrote:
Reading the python reference I've found a paragraph that explains this
behaviour:
# From gtk.gdk.theads_init reference:
Signal handlers are automatically invoked within a gdk_threads_enter()
and gdk_threads_leave() function pair by GTK so the
gtk.gdk.threads_enter() and gtk.gdk.threads_leave() functions should
not be called within a Python signal handler or the application will
deadlock. However, idle, timeout and input handlers are executed
outside the GGL so these should use the gtk.gdk.threads_enter() and
gtk.gdk.threads_leave() functions if PyGTK methods or functions are
called.
###############
A threading tutorial for PyGTK is urgently needed, some charitable
guru there? ;-)
On Mon, 14 Mar 2005 22:55:35 +0100, V�ctor M. Hern�ndez Rocamora
<[EMAIL PROTECTED]> wrote:
The problem is that window class is not running in another thread,
actually, and when you call d.run() in the button click handler, the
theads_enter() statement freezes your app.
You can make a run method to be called from the window without
theads_enter() and threads_leave():
def run_no_thread(self):
"""You call this form window class()"""
print 'no threads'
rep = self.dialog.run()
blah, blah...
return passphrase, save_passphrase_checkbutton.get_active()
def run(self):
"""You call this form plugin() class"""
gtk.gdk.threads_enter()
the same stuff from run_no_threads()
gtk.gdk.threads_leave()
return passphrase, save_passphrase_checkbutton.get_active()
Or you can just define a param for run() telling if it is called form
a thead or not:
def run(self, in_thread=False):
if in_thread:
gtk.gdk.threads_enter()
...stuff...
if in_thread:
gtk.gdk.threads_leave()
return passphrase, save_passphrase_checkbutton.get_active()
I'm afraid I'm not an expert on threading so I don't know really
what's the best design, but I hope this helps you.
great it works now, thanks a lot for your help
Yann
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/