2017-04-04 66 views
0

我有一些麻煩將其連接到一個GUI Qt的信號時使用functools.partial()將參數傳遞給一個函數(log_this()是一個僞函數只是傳達問題):PyQt的連接到functools.partail傳遞信號值

self.ui.comboBox_1.currentIndexChanged.connect(functools.partial(self.log_this, val='aaaaaa')) 

def log_this(self, val='0000'): 
    log.info(val) 

得到錯誤:

TypeError: log_this() got multiple values for argument 'val'

如果我用lambda來調用函數正常工作:

self.ui.comboBox_1.currentIndexChanged.connect(lambda: self.log_this(val='aaaaaa')) 

看着這個,我看到log_this()正在獲取當前的comboBox索引。我也嘗試使用位置參數,並且也得到了上面的錯誤。

我想了解使用functools.partial()是否正確,或者我應該堅持使用lambda表示這種情況。如果正確,那麼正確的做法是什麼?

中添加更多細節:

我的課:

class AppMainWindow(QtGui.QMainWindow): 
    message = QtCore.Signal(str) 

    def __init__(self, parent=None): 
     super().__init__(parent=parent) 
     self.manual_test = True 
     self.all_tests_enabled = False 
     self.set_connections() 

    def set_connections(self): 
     self.ui.comboBox_1.currentIndexChanged.connect(
      functools.partial(self.log_this, val='aaaaaa')) 
     self.ui.pushButton_1.clicked.connect(self.add_item) 

    def log_this(self, val='0000'): 
     log.info(val) 

我使用PySide 1.2.2。

在此先感謝!

+0

是你的'log_this'實際上是一個類的方法?如果沒有,爲什麼它有一個「自我」?如果是這樣,你能展示一個更完整的例子嗎? –

+0

是的,它是我的主窗口類的一部分。我已經添加了一個類的例子 –

回答

0

發生這種情況的原因是currentIndexChanged發出一個值(可能是新的索引),您的方法獲得的值爲val。你有各種選擇在這裏:

  • 它連接到像lambda _idx: self.log_this('aaaaaa')
  • 使用currentIndexChanged[()].connect(...)得到信號的不帶參數的版本 - 這應該與PyQt5工作,我不知道PySide。
  • 添加像_idxlog_this一個位置參數之前val