pyqt5 Есть ли более элегантный способ изменить функциональность кнопки в зависимости от того, какие флажки отмечены? - PullRequest
0 голосов
/ 01 августа 2020

Я новичок ie, играюсь с модулем PyQT5 и учусь создавать GUI для моей небольшой программы.

Я сделал небольшой 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. Я не хочу быть следующим яндэвом, смеется.

1 Ответ

0 голосов
/ 01 августа 2020

Вам не нужны все 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...