Как правильно и красиво переписать этот код
Создаю приложение pyqt5. Есть такой кусок кода, который записывает состояние чекбоксов во флаги и в соответствии с этими состояниями добавляет в текстовую переменную названия выбранных этапов. Этот код работает, но хотелось бы привести его к нормальному виду(изменение индексов в цикле, например). Как это можно сделать?
self.flag_stage1 = self.check_stage1.isChecked()
self.flag_stage2 = self.check_stage2.isChecked()
self.flag_stage3 = self.check_stage3.isChecked()
self.text_stage = ""
if self.flag_stage1 is True:
self.text_stage = self.text_stage + " Этап 1\n"
if self.flag_stage2 is True:
self.text_stage = self.text_stage + " Этап 2\n"
if self.flag_stage3 is True:
self.text_stage = self.text_stage + " Этап 3\n"
if (self.flag_stage1 or self.flag_stage2 or self.flag_stage3) is False:
self.text_stage = "Ни один этап не выбран\n"
self.logBrowser.append(log("Испытание запущено\n"
"Выбранные этапы:\n" + self.text_stage))
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Можно переписать примерно так (от промежуточных flag_stage вообще решил избавиться, просто проходим циклом по чекбоксам):
check_stages = [self.check_stage1, self.check_stage2, self.check_stage3]
text_stages = ""
for i, check_stage in enumerate(check_stages, start=1):
if check_stage.isChecked():
text_stages += f" Этап {i}\n"
if not text_stages: # Текст пустой, значит ничего не было выбрано
text_stages = "Ни один этап не выбран\n"
self.logBrowser.append(log("Испытание запущено\n"
"Выбранные этапы:\n" + text_stages))
Еще вариант, не собираем строку text_stages, а формируем список этапов, и только в конце объединяем в общую строку:
stages = [f" Этап {i}" for i, check_stage in enumerate(check_stages, start=1)
if check_stage.isChecked()]
if not stages: # Список пустой, значит ничего не было выбрано
text_stages = "Ни один этап не выбран\n"
else:
text_stages = "\n".join(stages)