PyQt: Окна сообщений QMessageBox и обработка ошибок

Проблема повторного нажатия кнопки

Повторное нажатие кнопки «равно» приводит к ошибке: в текстовом поле находится строка, а не математическое выражение. Программа завершается с ошибкой, выведенной в консоль. Решение: использование всплывающих окон для информирования пользователя.

Предотвращение ошибки

Для предотвращения повторного выполнения кода при повторном нажатии кнопки «равно» используется переменная is_equal. Если is_equal – False, код выполняется, и is_equal устанавливается в True. При повторном нажатии is_equal будет True, код, вызывающий ошибку, пропускается, отображается всплывающее окно.

Всплывающее окно: создание и настройка

Импортируем класс QMessageBox из PyQt5.QtWidgets:

from PyQt5.QtWidgets import QMessageBox

Создаем объект error:

error = QMessageBox()

Отображение окна: error.exec_(). Перед отображением заполним его информацией:

error.setWindowTitle("Ошибка")
error.setText("Сейчас это действие выполнить нельзя")
error.setIcon(QMessageBox.Warning)

Возможны другие иконки: QMessageBox.Information, QMessageBox.Critical и другие.

Добавим кнопки «OK» и «Отмена» с помощью setStandardButtons():

error.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

Кнопки разделяются символом |. Установим кнопку «OK» по умолчанию:

error.setDefaultButton(QMessageBox.Ok)

Добавим дополнительный текст:

error.setInformativeText("Два раза действия не выполнить")
error.setDetailedText("Полная информация об ошибке")

Обработка нажатия кнопок

Обработка нажатия кнопок через сигнал buttonClicked:

error.buttonClicked.connect(popup_action)

Функция popup_action принимает нажатую кнопку как параметр:

def popup_action(button):
    if button.text() == "OK":
        print("OK")
    elif button.text() == "Reset":
        label_result.setText("")
        is_equal = False

При нажатии «Reset» очищается текстовое поле, is_equal сбрасывается.

QMessageBox позволяет создавать удобные всплывающие окна, эффективно обрабатывая ошибки и предоставляя дополнительную информацию. В уроке рассмотрены основные методы настройки и использования всплывающих окон в PyQt.

Что будем искать? Например,программа