On Friday 27 April 2007 7:05 am, Pradnyesh Sawant wrote: > On 4/27/07, Pradnyesh Sawant wrote: > > Hello, i have the following code: > > ################################################################# > > import time > > import sys > > from PyQt4 import QtGui, QtCore > > > > class Counter(QtCore.QThread): > > def __init__(self): > > QtCore.QThread.__init__(self) > > def run(self): > > cntr = 0 > > while cntr < 10: > > cntr += 1 > > self.emit(QtCore.SIGNAL("showCntr1(PyObject*)"), (cntr, > > "a")) # line 1 > > self.emit(QtCore.SIGNAL("showCntr2"), (cntr, "a")) > > # line 2 > > time.sleep(0.2) > > class Gui(QtGui.QDialog): > > def __init__(self, parent = None): > > QtGui.QDialog.__init__(self, parent) > > frameStyle = QtGui.QFrame.Sunken | QtGui.QFrame.Panel > > > > self.lCntr = QtGui.QLabel() > > self.lCntr.setFrameStyle(frameStyle) > > loGrd = QtGui.QGridLayout() > > loGrd.addWidget(self.lCntr, 0, 0) > > self.setLayout(loGrd) > > self.setWindowTitle(self.tr("Counter")) > > def showCntr1(self, val): > > print val, str(val) > > self.lCntr.setText(str(val)) > > def showCntr2(self, val): > > print val, str(val) > > self.lCntr.setText(str(val)) > > if __name__ == "__main__": > > app = QtGui.QApplication(sys.argv) > > dialog = Gui() > > cntr = Counter() > > cntr.start() > > QtCore.QObject.connect(cntr, QtCore.SIGNAL("showCntr1(PyObject*)"), > > dialog.showCntr1, QtCore.Qt.QueuedConnection) > > QtCore.QObject.connect(cntr, QtCore.SIGNAL("showCntr2"), > > dialog.showCntr1, QtCore.Qt.QueuedConnection) > > There's a small bug in the above line, it should be dialog.showCntr2, > and not dialog.showCntr1. However, even with this change, the output > shown below remains the same :( > > > sys.exit(dialog.exec_()) > > ################################################################# > > If i comment out "line 1", then i get the following output: > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > 0.2 0.2 > > Notice that 0.2 is the time value of the sleep instruction. Why is > > this happening? > > > > On the other hand, if i comment out "line 2", then i get the following > > output: (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > (<refcnt 0 at 0xb7dcd28c>, 'a') (<NULL>, <NULL>) > > What i get from the above is that a reference to "cntr" is being > > passed, but by the time the gui thread is actually run, both the > > values (cntr and "a") have been destroyed, hence the NULL values. > > ***How do i circumvent this problem?*** > > > > Lastly, if i don't comment out any of line 1 or 2, then i get the foll > > output: (<__main__.Gui object at 0xb6a8f12c>, (<__main__.Gui object at > > 0xb6a8f12c>, (<__main__.Gui object at 0xb6a8f12c>, (<__main__.Gui > > object at 0xb6a8f12c>, (<__main__.Gui object at 0xb6a8f12c>, > > (<__main__.Gui object at 0xb6a8f12c>, (<__main__.Gui object at > > 0xb6a8f12c>, (<__main__.Gui object at 0xb6a8f12c>, (<__main__.Gui > > object at 0xb6a8f12c>, (<__main__.Gui object at 0xb6a8f12c>, > > (<__main__.Gui object at 0xb6a8f12c>, (<__main__.Gui object at > > 0xb6a8f12c>, (<__main__.Gui object at 0xb6a8f12c>, (<__main__.Gui > > object at 0xb6a8f12c>, (<__main__.Gui object at 0xb6a8f12c>, > > (<__main__.Gui object at 0xb6a8f12c>, (<__main__.Gui object at > > 0xb6a8f12c>, (<__main__.Gui object at 0xb6a8f12c>, .......... > > i don't know what this means??? Can anyone kindly explain what's > > happening... > > > > I'm using: > > python: 2.4.4~c1-0ubuntu1 > > qt4-dev-tools: not installed > > python-qt4: 4.0.1-1ubuntu1 > > sip4: (4.4.5-2ubuntu1 > > os: ubuntu edgy
As I said in the other thread, upgrade to a current release of PyQt. Also "PyObject*" should no longer be used in signal signatures - use "PyQt_PyObject" instead. Phil -- http://mail.python.org/mailman/listinfo/python-list