pyqt5 是否有更优雅的方式来改变按钮的功能,具体取决于选中的复选框?

pyqt5 Is there a more elegant way of altering the functionality of a button, depending on what checkboxes are checked?

我是新手,正在玩 PyQT5 模块并学习如何为我的小程序制作 GUI。

我制作了一个带有 3 个复选框和一个按钮的小图形用户界面,复选框的功能会发生变化。

我当前的实现如下所示:

#Checkboxes and button logic
def stateChanged(self):
    if self.GetErrorsBox.isChecked() and self.GetSpecsBox.isChecked() and self.GetConfigBox.isChecked():
        self.execButton.clicked.connect(lambda: self.getErrors())
        self.execButton.clicked.connect(lambda: self.copyConfig())
        self.execButton.clicked.connect(lambda: self.getSpecs())

    elif self.GetErrorsBox.isChecked() and self.GetSpecsBox.isChecked():
        self.execButton.clicked.connect(lambda: self.getSpecs())
        self.execButton.clicked.connect(lambda: self.getErrors())

    elif self.GetErrorsBox.isChecked() and self.GetConfigBox.isChecked():
        self.execButton.clicked.connect(lambda: self.getErrors())
        self.execButton.clicked.connect(lambda: self.getSpecs())

    elif self.GetSpecsBox.isChecked() and self.GetConfigBox.isChecked():
        self.execButton.clicked.connect(lambda: self.copyConfig())
        self.execButton.clicked.connect(lambda: self.getSpecs())

    elif self.GetSpecsBox.isChecked():
        self.execButton.clicked.connect(lambda: self.getSpecs())

    elif self.GetErrorsBox.isChecked():
        self.execButton.clicked.connect(lambda: self.getErrors())

    elif self.GetConfigBox.isChecked():
        self.execButton.clicked.connect(lambda: self.copyConfig())

问题: 有没有办法将所有这些 IF 和 ELIF 重构为更具可读性的内容?

我以后可能会再添加一个复选框,所以我真的不想继续添加 IF 和 ELIF。我不想成为下一个 yandev,哈哈。

您不需要所有 elif,只需要:

if self.GetSpecsBox.isChecked():
    self.execButton.clicked.connect(lambda: self.getSpecs())

if self.GetErrorsBox.isChecked():
    self.execButton.clicked.connect(lambda: self.getErrors())

if self.GetConfigBox.isChecked():
    self.execButton.clicked.connect(lambda: self.copyConfig())