【发布时间】:2017-03-23 16:05:04
【问题描述】:
我有一个工作对象,它有很多功能,我想在额外的线程上使用它们。所以,我跟着this 回答,如果我将固定数量的参数传递给函数,它就可以工作,或多或少像这样:
_signalCommand = QtCore.pyqtSignal(str, str)
self._signalCommand.connect(self.nanomax.test)
self._signalCommand.emit('testA', 'testB')
但就我而言,我不能使用固定数量的参数。我需要可选的,我的功能是这样的:
def test(self, test1='test1', test2='test2'):
print test1
print test2
所以,为了解决我使用 lambda 的问题,如下所示:
_signalCommand = QtCore.pyqtSignal()
self._signalCommand.connect(lambda: self.nanomax.test('testA', 'testB')
self._signalCommand.emit()
这样做确实可以解决我的可选参数问题,但它会使对象在主线程中运行。我认为这是因为 lambda 创建了另一个函数,就像我之前分享的答案中提到的那样直接调用 worker (self.nanomax.test('testA', 'testB')。
有没有办法避免这种情况?提前谢谢你。
【问题讨论】:
-
在您在这里描述的情况下,您有两个可选参数并且您提前知道它们的值,我看不出有任何问题。只需创建一个信号
_signalCommand = QtCore.pyqtSignal()和另一个_signalCommand2 = QtCore.pyqtSignal(str, str)将它们连接起来,然后根据您是否要使用默认值来发出您喜欢的信号。 -
问题是在我的程序中我需要从一个列表中获取所有可选参数。这个列表会给我带来任意数量的任意值的参数。
标签: multithreading lambda pyqt keyword-argument