Pyside:我怎么知道哪个线程发出信号“完成”?

时间:2015-01-21 19:25:56

标签: python pyqt signals pyside slot

我开始一些线程,并想知道哪个线程已完成:

...
...
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的最后一个值)。为什么?信号“完成”可以用这种方式使用参数吗?我已经阅读了一些关于QSignalMapper的内容。还有另一种方式吗?

如果我使用self.sender()我得到线程的指向,但我不知道它是哪个线程号。

1 个答案:

答案 0 :(得分:2)

对于lambda,请尝试:

lambda k=k: self.print_finished("WorkerThread %d finished" % k)
       ^^^

使用这种语法,lambda创建时k的值将被lambda捕获并使用。