PyQt QMessageBox

Summary: in this tutorial, you’ll learn how to use the PyQt QMessageBox class to create a modal dialog that alerts the user or asks the user to make a decision.

Introduction to PyQt QMessageBox class

The QMessageBox class allows you to create a modal dialog that alerts the user with important information or asks the user a question and receives an answer.

The QMessageBox provides some useful static methods for displaying a message box:

  • information() – show an information message.
  • question() – ask the user a question and receives an answer.
  • warning() – show a warning message.
  • critical() – display critical information.

PyQt QMessageBox examples

The following program shows a window with four buttons, clicking a button will display a corresponding message:

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())Code language: Python (python)

How it works.

The question() method displays a message box with a question that asks the user to select either a Yes or No button:

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

To get which button the user clicked, you compare the return value of the question() method with the Yes and No members of the QMessageBox.StandardButton enum:

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
    )Code language: Python (python)

The information() method displays a message box with information. It accepts the parent widget, the title of the message box, and the message.

 QMessageBox.information(
    self,
    'Information',
    'This is important information.'
)Code language: Python (python)
PyQt-QMessageBox-Information-Message

The warning() method displays a warning message. Its appearance is like the information except for the warning icon:

QMessageBox.warning(
    self,
    'Warning',
    'This is a warning message.'
)Code language: Python (python)

Output:

The critical() method displays a critical message on the message box. The stop icon makes the message critical.

QMessageBox.critical(
    self,
    'Critical',
    'This is a critical message.'
)Code language: Python (python)

Summary

  • Use QMessageBox class to create a modal dialog that displays a message box or asks the user a question and receives an answer.
Did you find this tutorial helpful ?