当将参数连接到 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)
出现错误:
类型错误: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。
提前感谢!
发生这种情况是因为currentIndexChanged
发出一个值(可能是新索引(,您的方法val
该值。您在这里有多种选择:
- 将其连接到类似
lambda _idx: self.log_this('aaaaaa')
- 使用
currentIndexChanged[()].connect(...)
获取没有参数的信号版本 - 这应该适用于 PyQt5,我不知道 PySide。 - 在
val
之前将位置参数(如_idx
(添加到log_this