使用lambda表达式连接pyqt
考虑以下代码:类mainwindow(qtgui.qwidget): def __init __(自我): ... self.buttons = [] 对于[3,4]中的IDX: button = qtgui.qpushbutton('button {} auto'.format(idx),self) button.clicked.connect(lambda x = idx:self.button_pushed(x)) self.buttons.append(按钮) main_layout.addwidget(button)的原因是,此行为的原因是qpushbutton的点击信号发出了一个指示fign的参数,该参数指示了fint fint fint finttht fint的状态。当在插槽中使用lambda表达式时,分配的值(例如在这种情况下为x = idx)被发出的参数覆盖。
解决此问题,lambda的表达式应忽略按钮状态并使用附加的命名参数:此修改可确保正确的值传递给button_pushed方法,无论按钮的状态如何。
理解lambda表达的机制也很重要。在插槽连接的上下文中,信号启动时未评估lambda函数。取而代之的是,将函数的指针(带有替换参数)连接到信号。发出信号时,信号传递的参数调用连接的函数。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3