Hi, everyone

I met a problem that UI will be blocked forever if I emit a signal from a thread to create a message dialog. Following code will reproduce the issue, please let me give a short explanation: AThread thread defines a custom signal named "ASignal", and the signal handler is aSignal() function of MainWindow class. The aSignal() function is used to display a message dialog. Emitting "ASignal" signal will display the message dialog successfully but the UI is blocked forever.

   import gtk
   import gobject
   import threading

   class AThread(threading.Thread, gobject.GObject):
        __gsignals__ = {
            'ASignal': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ())
        }
        def __init__(self):
            threading.Thread.__init__(self)
            gobject.GObject.__init__(self)

        def run(self):
            self.emit('ASignal')

   class MainWindow(gtk.Window):
        def aSignal(self, obj):
            dialog = gtk.MessageDialog(self,
   gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE,
   'asdfasf')
            dialog.run()
            dialog.destroy()

   gobject.threads_init()

   w = MainWindow()

   t = AThread()
   t.connect('ASignal', w.aSignal)
   t.start()

   gtk.main()


Any suggestion is appreciated.

Thanks,
_______________________________________________
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to