PyQt QMessageBox в Python — создание модального диалога

Класс QMessageBox позволяет создать модальный диалог в Python, который оповещает пользователя о важной информации или задает ему вопрос и получает ответ.

Знакомство с PyQt QMessageBox

QMessageBox предоставляет несколько полезных статических методов для отображения окна сообщения:

  • information() – показать информационное сообщение.
  • question() – задать пользователю вопрос и получить ответ.
  • warning() – показать предупреждающее сообщение.
  • critical() – отображает критическую информацию.

Примеры с PyQt QMessageBox

Следующая программа показывает окно с четырьмя кнопками, при нажатии на кнопку отображается соответствующее сообщение:

import sys
from PyQt6.QtWidgets import QApplication,  QMessageBox, QWidget, QHBoxLayout,  QPushButton


class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setWindowTitle('PyQt QMessageBox')
        self.setGeometry(100, 100, 300, 100)

        layout = QHBoxLayout()
        self.setLayout(layout)

        btn_question = QPushButton('Question')
        btn_question.clicked.connect(self.question)

        btn_info = QPushButton('Information')
        btn_info.clicked.connect(self.info)

        btn_warning = QPushButton('Warning')
        btn_warning.clicked.connect(self.warning)

        btn_critical = QPushButton('Critical')
        btn_critical.clicked.connect(self.critical)

        layout.addWidget(btn_question)
        layout.addWidget(btn_info)
        layout.addWidget(btn_warning)
        layout.addWidget(btn_critical)

        self.show()

    def info(self):
        QMessageBox.information(
            self,
            'Information',
            'This is important information.'
        )

    def warning(self):
        QMessageBox.warning(
            self,
            'Warning',
            'This is a warning message.'
        )

    def critical(self):
        QMessageBox.critical(
            self,
            'Critical',
            'This is a critical message.'
        )

    def question(self):
        answer = QMessageBox.question(
            self,
            'Confirmation',
            'Do you want to quit?',
            QMessageBox.StandardButton.Yes |
            QMessageBox.StandardButton.No
        )
        if answer == QMessageBox.StandardButton.Yes:
            QMessageBox.information(
                self,
                'Information',
                'You selected Yes. The program will be terminated.',
                QMessageBox.StandardButton.Ok
            )
            self.close()
        else:
            QMessageBox.information(
                self,
                'Information',
                'You selected No.',
                QMessageBox.StandardButton.Ok
            )


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

Как это работает.

Метод question() отображает окно сообщения с вопросом, в котором пользователю предлагается выбрать кнопку «Yes» или «No»:

answer = QMessageBox.question(
    self,
    'Confirmation',
    'Do you want to quit?',
    QMessageBox.StandardButton.Yes |
    QMessageBox.StandardButton.No
)

Пример PyQt QMessageBox

Чтобы узнать, какую кнопку нажал пользователь, вы сравниваете возвращаемое значение метода question() с членами Yes и No перечисления QMessageBox.StandardButton:

if answer == QMessageBox.StandardButton.Yes:
    QMessageBox.information(
        self,
        'Information',
        'You selected Yes. The program will be terminated.',
        QMessageBox.StandardButton.Ok
    )
    self.close()
else:
    QMessageBox.information(
        self,
        'Information',
        'You selected No.',
        QMessageBox.StandardButton.Ok
    )

Метод information() отображает окно сообщения с информацией. Он принимает родительский виджет, заголовок окна сообщения и сообщение.

 QMessageBox.information(
    self,
    'Information',
    'This is important information.'
)

Метод information()

PyQt-QMessageBox-Информационное сообщение

Метод warning() отображает предупреждающее сообщение. Его внешний вид аналогичен информации, за исключением значка предупреждения:

QMessageBox.warning(
    self,
    'Warning',
    'This is a warning message.'
)

Выход:

Метод warning()

Метод critical() отображает критическое сообщение в окне сообщения. Значок остановки делает сообщение критическим.

QMessageBox.critical(
    self,
    'Critical',
    'This is a critical message.'
)

Метод critical()

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *