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/