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 > -- > warm regards, > Pradnyesh Sawant > -- > Be yourself, everyone else is taken. --Anon >
-- warm regards, Pradnyesh Sawant -- Be yourself, everyone else is taken. --Anon -- http://mail.python.org/mailman/listinfo/python-list