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/

Reply via email to