Pyside:我怎么知道哪个线程发出了信号"finished"?
Pyside: How can i know which thread emitted the signal "finished"?
我启动了一些线程,我想知道哪个线程已完成:
...
...
def start_ten_threads(self):
self.workers = []
for i in range(0, 10):
self.workers.append(thread_worker(i, self))
...
...
for k in range(0, 10):
self.workers[k].finished.connect(lambda: self.print_finished("WorkerThread %d finished" % k))
self.workers[k].start()
@Slot(str)
def print_finished(self, str):
print(str)
我为每个线程获得相同的数字 9(k 的最后一个值)。为什么?我可以通过信号 "finished" 以这种方式使用参数吗?我已经阅读了一些关于 QSignalMapper 的内容。这里有别的方法吗?
如果我使用 self.sender() 我得到线程的指向,但我不知道它是哪个线程号。
对于 lambda,尝试:
lambda k=k: self.print_finished("WorkerThread %d finished" % k)
^^^
使用此语法,创建 lambda 时 k
的值将被捕获并由 lambda 使用。
我启动了一些线程,我想知道哪个线程已完成:
...
...
def start_ten_threads(self):
self.workers = []
for i in range(0, 10):
self.workers.append(thread_worker(i, self))
...
...
for k in range(0, 10):
self.workers[k].finished.connect(lambda: self.print_finished("WorkerThread %d finished" % k))
self.workers[k].start()
@Slot(str)
def print_finished(self, str):
print(str)
我为每个线程获得相同的数字 9(k 的最后一个值)。为什么?我可以通过信号 "finished" 以这种方式使用参数吗?我已经阅读了一些关于 QSignalMapper 的内容。这里有别的方法吗?
如果我使用 self.sender() 我得到线程的指向,但我不知道它是哪个线程号。
对于 lambda,尝试:
lambda k=k: self.print_finished("WorkerThread %d finished" % k)
^^^
使用此语法,创建 lambda 时 k
的值将被捕获并由 lambda 使用。