【发布时间】:2019-11-21 11:17:19
【问题描述】:
我使用字典键作为复选框文本从字典创建了一些 QCheckBoxes。
然后我使用lambda 表达式将信号连接到更新函数。
我想传递给这个更新函数的是复选框的文本,所以每个 lambda 都有其特定的参数。
尽管如此,无论我单击哪个复选框,我总是会得到最后添加的小部件的文本。
我是否错过了关于使用 lambda 进行信号传递概念的重要内容?
import sys
from PyQt5.QtWidgets import QDialog, QCheckBox, QVBoxLayout, QApplication, QSlider, QLabel
class Window(QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
layout = QVBoxLayout()
cb_dict = {"cb1": False, "cb2": True, "cb3": False}
cb_widget_list = list()
for checkbox in cb_dict:
widget = QCheckBox(checkbox)
widget.stateChanged.connect(lambda: self.update(checkbox))
cb_widget_list.append(widget)
for widget in cb_widget_list:
layout.addWidget(widget)
self.setLayout(layout)
def update(self, origin: str):
print("Checkbox {} has changed".format(origin))
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Window()
main.show()
sys.exit(app.exec_())
所以输出总是Checkbox cb3 has changed。
【问题讨论】: