[PyKDE] Attached program hangs after 1 "print" in 3.10 and 3.11

James Lamanna jamesl at appliedminds.com
Thu Apr 22 22:49:00 BST 2004


The simple program below does not produce the desired behavior, which is
to print text to a QTextBrowser once a second from another thread.
Instead it just hangs after the thread posts 1 event.
Is there something I'm doing horribly wrong?
This breaks on 3.10 and 3.11 of PyQt with Qt 3.3.0
(using Gentoo emerge to install)
Thanks.
Please CC me for I am not subscribed.

- James Lamanna

from qt import *
import sys
import threading
import time

class test_thread(threading.Thread):
     def __init__(self, mainwin, group=None, target=None, name=None,
                  args=(), kwargs={}):
         threading.Thread.__init__(self, group=group, target=target,
                                   name=name, args=args, kwargs=kwargs)

         self.mainwin = mainwin
         self.quit = False
         self.counter = 10

     def run(self):
         while not self.quit and self.counter > 0:
             time.sleep(1) # Sleep for 1s
             print 'print'
             QApplication.sendEvent(self.mainwin,
                                    QCustomEvent(QEvent.User, None))
             QApplication.sendPostedEvents()
             self.counter -= 1


class test_Window(QMainWindow):
     def __init__(self,parent = None,name = None,fl = 0):
         QMainWindow.__init__(self,parent,name,fl)
         self.setCentralWidget(QWidget(self, 'central_widget'))
         self.textview = \
	    QTextBrowser(self.centralWidget(),"ResponseText")
         self.textview.setGeometry(QRect(0,0,480,420))
         self.textview.setTextFormat(Qt.RichText)
         self.textview.setReadOnly(True)
         self.resize(QSize(1038,878).expandedTo(self.minimumSizeHint()))
         self.clearWState(Qt.WState_Polished)

     def event(self, e):
         if e.type() == QEvent.User:
             self.postText()
             return True
         return QMainWindow.event(self, e)

     def postText(self):
         print 'post'
         self.textview.append('TEST TEXT<br>')


if __name__ == '__main__':
     a = QApplication(sys.argv)
     mw = test_Window()

     QObject.connect(a, SIGNAL('lastWindowClosed()'),
                     a, SLOT('quit()'))
     a.setMainWidget(mw)
     mw.show()
     test_thread(mw).start()

     a.exec_loop()




More information about the PyQt mailing list