在pyQt5中使用QLineEdit控件时,editingFinished的槽函数貌似有一些问题。目前(2023年06月23日)没有解决,可能的原因有:lambda函数的规则。editingFinished本身的问题。
请各位提供解决思路,谢谢!
问题详述如下:
(1)editingFinished的槽函数只能写成这个样子:
nameLabelEd.editingFinished.connect(lambda:self.nameLabelEdittingFinished(gbxAA))
其特点是lambda函数后面没有参数,只能把参数放在括号里面。写成常见的传递参数方式时,报错:<lambda>() missing 1 required positional argument: '_'
(2)当有多个QLineEdit控件时,希望通过循环来写给这些控件写槽函数。这是需要在循环的时候不断修改参数gbxAA。但是,这个时候gbxAA不会修改,而是固定为最后一个。
(3)把editingFinished换成QLineEdit的另一个信号textChanged后,就没有这样的问题了。可以通过lambda把参数传进去。
for key,value in paraAA['dtTick'].items():
edLineAA = gbxAA['gP'].datSDict[key]#key = 'comResTime'
edLineAA.textChanged.connect(lambda _,
key0 = key,
edLine = edLineAA: self.tChanged(key0,edLine))
今天(2023年06月24日)依然没有解决,不过发现一个类似的现象,在pyQt5中使用QCheckBox控件时也必须把lambda函数写成参数传递的形式,否则在循环的时候会刷到最后一个值。