[python] Jak ladit QThreads z PySide nebo PyQt ?

Radek Holý radekholypublic na gmail.com
Pondělí Leden 14 01:02:44 CET 2013


Zkusil jsem to v PyCharm (nikdy jsem tam ale debugger nezkousel) a na
breakpointech v konstruktoru Workerů se mi to zastaví, ale na breakpointech
v ``MyWorkerThread.run`` ne, takže PyCharm to asi také neumí...

-- 
Radek



2013/1/13 darkanry <richard.andrysek na freenet.de>

> Stahl jsem si jednoduchy priklad pro praci s QThread. Priklad funguje bez
> problemu, tak jsem ho zacal upravovat. Bohuzel jsem zjistil, ze to v PyDev
> nejde ladit. Nevite nekdo jak na to? Kdyz to nejde s PyDev, jde to necim
> jinym?
>
> Priklad:
>
> #import pydevd
> #pydevd.connected = True
> #pydevd.settrace()
>
> from PySide import QtCore
>
> import time, sys
>
> class MyWorkerThread(QtCore.QThread):
>     message = QtCore.Signal(str)
>
>     def __init__(self, id, parent=None):
>         super(MyWorkerThread, self).__init__(parent)
>         self.id = id
>
>     def run(self):
>         for i in range(10):
>             self.message.emit("%d: %d" % (self.id, i))
>             time.sleep(0.2)
>
> class MainProgram():
>     def __init__(self, parent=None):
>         self.threads = []
>
>         self.addWorker(MyWorkerThread(1))
>         self.addWorker(MyWorkerThread(2))
>
>     def addWorker(self, worker):
>         worker.message.connect(self.printMessage,
> QtCore.Qt.QueuedConnection)
>         # connect the finished signal to method so that we are notified
>         worker.finished.connect(self.workersFinished)
>         self.threads.append(worker)
>
>     def startWorkers(self):
>         for worker in self.threads:
>             print worker.id
>             worker.start()
>             # no wait, no finished. you start the threads and leave.
>
>     def workersFinished(self):
>         if all(worker.isFinished() for worker in self.threads):
>             # wait until all the threads finished
>             QtCore.QCoreApplication.instance().quit()
>
>     @QtCore.Slot(str)
>     def printMessage(self, text):
>         sys.stdout.write(text+'\n')
>         sys.stdout.flush()
>
> if __name__ == '__main__':
>
>     app = QtCore.QCoreApplication(sys.argv)
>     m = MainProgram()
>     m.startWorkers()
>     sys.exit(app.exec_())
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20130114/1e6cb90c/attachment.html>


Další informace o konferenci Python