在将参数连接到GUI Qt信号时,使用functools.partial()
将参数传递给函数时遇到了一些问题(log_this()是一个虚函数,只是为了传达问题):
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()为参数' 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 :(得分:0)
这种情况正在发生,因为currentIndexChanged
会发出一个值(可能是新索引),您的方法会将其作为val
。你有多种选择:
lambda _idx: self.log_this('aaaaaa')
currentIndexChanged[()].connect(...)
获取没有参数的信号版本 - 这应该适用于PyQt5,我不了解PySide。_idx
log_this
等位置参数添加到val