2016-11-09 20 views
1

私は多くの関数を持つワーカーオブジェクトを持っており、余分なスレッドでそれらを使用したいと思います。だから、私はthis答えに続き、私は多かれ少なかれ、このように、関数に引数の固定数を渡した場合、それは動作します:別のスレッドでオプションの引数を持つ複数の関数を持つオブジェクト

_signalCommand = QtCore.pyqtSignal(str, str) 
    self._signalCommand.connect(self.nanomax.test) 
    self._signalCommand.emit('testA', 'testB') 

しかし、私の場合、私は、引数の固定数を使用することはできません。私のオプションの引数を修正し、

_signalCommand = QtCore.pyqtSignal() 
    self._signalCommand.connect(lambda: self.nanomax.test('testA', 'testB') 
    self._signalCommand.emit() 

は確かに、この方法を行う:

​​

だから、私はこのように、ラムダを使用していたことを修正するために:私は私の機能は、このようなもので、オプションのものを必要とします問題は発生しますが、オブジェクトはメインスレッドで実行されます。私はこれがラムダが別の関数を作成し、私が以前に共有した答えで述べたように直接(self.nanomax.test('testA', 'testB')を呼び出すようなものだと思います。

これを避けるためにとにかくありますか?前もって感謝します。

おそらくこの

などのために部分的に使用することができ

+0

次の2つのオプションの引数を持っていて、事前にその価値を知っているあなたはここで説明する場合には、私は何の問題が表示されません。 '_signalCommand = QtCore.pyqtSignal()'信号と '_signalCommand2 = QtCore.pyqtSignal(str、str)'信号を両方とも接続し、デフォルト値を使用するかどうかに応じて好きなように出力します。 – ImportanceOfBeingErnest

+0

私のプログラムでは、すべてのオプション引数をリストから取得する必要があります。このリストは、任意の数のパラメータに任意の値を持ちます。 – Eduardo

答えて

0

from functools import partial 
... 

_signalCommand = QtCore.pyqtSignal() 
    self._signalCommand.connect(partial(self.nanomax.test, 'testA', 'testB')) 
    self._signalCommand.emit() 
+0

ありがとう、それは動作していますが、唯一の問題は、このようなアンパック演算子を使ってリスト値を渡すことができないということです: 'self._signalCommand.connect(partial(self.nanomax.test、* self.arg [1 :])) '、それを行う別の方法はありますか?リストと同じくらい多くの引数を渡しますか? – Eduardo

関連する問題