我使用PyQt中的for loop
连接多个信号/插槽。代码如下:
# Connect Scan Callbacks
for button in ['phase', 'etalon', 'mirror', 'gain']:
getattr(self.ui, '{}_scan_button' .format(button)).clicked.connect(
lambda: self.scan_callback(button))
我期望的是:
phase_scan_button
连接到scan_callback
slot
,并将字符串phase
作为参数发送给slot
。对于etalon
、mirror
和gain
,也是一样的。在我得到的是:
gain
作为所有按钮的参数传递。不确定我是愚蠢(可能)还是一个虫子。在作为参考,slot
方法:
当定义了},这将导致您看到的行为。在
button
时,lambda不存储button
的值。描述lambda函数的代码将被解析和编译,但在实际调用lambda之前不会执行。 无论何时单击任何按钮,都会使用变量button
的当前值。在循环的末尾,button
包含{试试这个:
输出为:
^{pr2}$扩展示例,作为lambda不存储
button
值的证据请注意,如果button
停止存在,则会出现一个错误:有输出
如前所述:Connecting slots and signals in PyQt4 in a loop 使用
functools.partial
是解决这个问题的一个很好的方法。在一天来一直在和OP一样的问题上挣扎。在
我在pyqt中迭代多个小部件的首选方法是将它们存储为列表中的对象。在
如果需要分别使用字符串“phase”、“etalon”、“mirror”和“gain”,可以将它们存储在另一个列表中,也可以创建一个类似于
^{pr2}$请注意,我如何使用lambda表达式和实体变量,然后将这些变量传递到函数
self.scan_callback
。这样,button
的值就被永久地存储起来了。在相关问题 更多 >
编程相关推荐