PySide6

QMessageBox: Modal Dialog for User Messages and Prompts

Manish Pushpam
August 29, 2025
4 min read
QMessageBox: Modal Dialog for User Messages and Prompts
QMessageBox is a convenient and easy-to-use dialog box in PySide6 for displaying messages to the user. It can be used to show information, warnings, errors, or to ask the user a question. QMessageBox provides built-in buttons like OK, Cancel, Yes, and No, making it easy to create standard message dialogs.

QMessageBox is a convenient and easy-to-use dialog box in PySide6 for displaying messages to the user. It can be used to show information, warnings, errors, or to ask the user a question. QMessageBox provides built-in buttons like OK, Cancel, Yes, and No, making it easy to create standard message dialogs.

Key Features of QMessageBox

  1. Standard Dialogs: Provides predefined dialogs for information, warnings, errors, and questions.
  2. Customizable Buttons: Allows adding standard buttons like OK, Cancel, Yes, and No.
  3. Icons: Displays standard icons to indicate the type of message (information, warning, error, question).
  4. Text and Detailed Text: Supports setting a main message and additional detailed text.
  5. Modal Dialog: Operates as a modal dialog, blocking interaction with other windows until dismissed.

Creating a QMessageBox

To create a QMessageBox, instantiate the QMessageBox class and configure its properties. Here is a basic example:

from PySide6.QtWidgets import QApplication, QMessageBox, QPushButton, QVBoxLayout, QWidget

class MessageBoxExample(QWidget):
    def __init__(self):
        super().__init__()

        layout = QVBoxLayout()

        self.info_button = QPushButton("Show Information")
        self.info_button.clicked.connect(self.show_info_message)

        layout.addWidget(self.info_button)
        self.setLayout(layout)
        self.setWindowTitle('QMessageBox Example')

    def show_info_message(self):
        msg_box = QMessageBox()
        msg_box.setIcon(QMessageBox.Information)
        msg_box.setText("This is an information message.")
        msg_box.setWindowTitle("Information")
        msg_box.setStandardButtons(QMessageBox.Ok)
        msg_box.exec()

app = QApplication([])
window = MessageBoxExample()
window.show()
app.exec()

In this example, clicking the "Show Information" button displays an information message using QMessageBox.


Showing Different Types of Messages

QMessageBox can be used to show various types of messages: information, warnings, errors, and questions. Here’s how to create each type:

Information Message:

msg_box = QMessageBox()
msg_box.setIcon(QMessageBox.Information)
msg_box.setText("This is an information message.")
msg_box.setWindowTitle("Information")
msg_box.setStandardButtons(QMessageBox.Ok)
msg_box.exec()

Warning Message:

msg_box = QMessageBox()
msg_box.setIcon(QMessageBox.Warning)
msg_box.setText("This is a warning message.")
msg_box.setWindowTitle("Warning")
msg_box.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
msg_box.exec()

Error Message:

msg_box = QMessageBox()
msg_box.setIcon(QMessageBox.Critical)
msg_box.setText("This is an error message.")
msg_box.setWindowTitle("Error")
msg_box.setStandardButtons(QMessageBox.Ok)
msg_box.exec()

Question Message:

msg_box = QMessageBox()
msg_box.setIcon(QMessageBox.Question)
msg_box.setText("Do you want to proceed?")
msg_box.setWindowTitle("Question")
msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
ret_val = msg_box.exec()
if ret_val == QMessageBox.Yes:
    print("User chose Yes")
else:
    print("User chose No")

Customizing QMessageBox

You can customize the QMessageBox by adding detailed text, custom icons, and changing the button labels:

msg_box = QMessageBox()
msg_box.setIcon(QMessageBox.Question)
msg_box.setText("Do you want to proceed?")
msg_box.setInformativeText("This action cannot be undone.")
msg_box.setWindowTitle("Custom Question")
msg_box.setDetailedText("Here is some detailed information about the action.")
msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
msg_box.setDefaultButton(QMessageBox.No)
ret_val = msg_box.exec()
if ret_val == QMessageBox.Yes:
    print("User chose Yes")
else:
    print("User chose No")

In this example, the QMessageBox includes detailed text and sets the default button to "No."


Practical Example

Let's create a practical example where different types of messages are displayed based on user actions:

from PySide6.QtWidgets import QApplication, QMessageBox, QPushButton, QVBoxLayout, QWidget

class MessageBoxExample(QWidget):
    def __init__(self):
        super().__init__()

        layout = QVBoxLayout()

        self.info_button = QPushButton("Show Information")
        self.info_button.clicked.connect(self.show_info_message)

        self.warning_button = QPushButton("Show Warning")
        self.warning_button.clicked.connect(self.show_warning_message)

        self.error_button = QPushButton("Show Error")
        self.error_button.clicked.connect(self.show_error_message)

        self.question_button = QPushButton("Show Question")
        self.question_button.clicked.connect(self.show_question_message)

        layout.addWidget(self.info_button)
        layout.addWidget(self.warning_button)
        layout.addWidget(self.error_button)
        layout.addWidget(self.question_button)
        self.setLayout(layout)
        self.setWindowTitle('QMessageBox Example')

    def show_info_message(self):
        msg_box = QMessageBox()
        msg_box.setIcon(QMessageBox.Information)
        msg_box.setText("This is an information message.")
        msg_box.setWindowTitle("Information")
        msg_box.setStandardButtons(QMessageBox.Ok)
        msg_box.exec()

    def show_warning_message(self):
        msg_box = QMessageBox()
        msg_box.setIcon(QMessageBox.Warning)
        msg_box.setText("This is a warning message.")
        msg_box.setWindowTitle("Warning")
        msg_box.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
        msg_box.exec()

    def show_error_message(self):
        msg_box = QMessageBox()
        msg_box.setIcon(QMessageBox.Critical)
        msg_box.setText("This is an error message.")
        msg_box.setWindowTitle("Error")
        msg_box.setStandardButtons(QMessageBox.Ok)
        msg_box.exec()

    def show_question_message(self):
        msg_box = QMessageBox()
        msg_box.setIcon(QMessageBox.Question)
        msg_box.setText("Do you want to proceed?")
        msg_box.setWindowTitle("Question")
        msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
        ret_val = msg_box.exec()
        if ret_val == QMessageBox.Yes:
            print("User chose Yes")
        else:
            print("User chose No")

app = QApplication([])
window = MessageBoxExample()
window.show()
app.exec()

In this example, four buttons display different types of message boxes when clicked.


All Available Button Types for QMessageBox

The QMessageBox class provides a set of standard buttons that can be used individually or in combination using the setStandardButtons method. These buttons are defined in the QMessageBox.StandardButton enum. Below is a comprehensive list of all available button types, as documented in the PySide6 QMessageBox documentation:

  1. QMessageBox.Ok: An "OK" button to acknowledge the message.
  2. QMessageBox.Open: An "Open" button, typically used for opening a file or resource.
  3. QMessageBox.Save: A "Save" button, often used in save-related prompts.
  4. QMessageBox.Cancel: A "Cancel" button to dismiss the dialog without action.
  5. QMessageBox.Close: A "Close" button to close the dialog or window.
  6. QMessageBox.Discard: A "Discard" or "Don't Save" button, often used in save prompts.
  7. QMessageBox.Apply: An "Apply" button to apply changes without closing the dialog.
  8. QMessageBox.Reset: A "Reset" button to revert settings to their defaults.
  9. QMessageBox.RestoreDefaults: A button to restore default settings.
  10. QMessageBox.Help: A "Help" button to display help or documentation.
  11. QMessageBox.SaveAll: A "Save All" button for saving multiple items.
  12. QMessageBox.Yes: A "Yes" button for confirming an action in a question dialog.
  13. QMessageBox.YesToAll: A "Yes to All" button for batch confirmation.
  14. QMessageBox.No: A "No" button for declining an action in a question dialog.
  15. QMessageBox.NoToAll: A "No to All" button for batch rejection.
  16. QMessageBox.Abort: An "Abort" button to stop an operation.
  17. QMessageBox.Retry: A "Retry" button to attempt an operation again.
  18. QMessageBox.Ignore: An "Ignore" button to bypass a warning or error.
  19. QMessageBox.NoButton: Indicates no button is selected (used internally).

Using Multiple Buttons

You can combine buttons using the | (bitwise OR) operator. For example:

msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)

This creates a dialog with "Yes," "No," and "Cancel" buttons.


Handling Button Responses

When a button is clicked, msg_box.exec() returns the corresponding StandardButton value. You can compare this value to determine the user’s choice:

ret_val = msg_box.exec()
if ret_val == QMessageBox.Yes:
    print("User clicked Yes")
elif ret_val == QMessageBox.No:
    print("User clicked No")
elif ret_val == QMessageBox.Cancel:
    print("User clicked Cancel")


Related Articles

Creating Dropdown Menus with QComboBox in PySide6

Creating Dropdown Menus with QComboBox in PySide6

QComboBox is a versatile widget in PySide6 that allows users to select from a list of options in a compact dropdown format, making it ideal for forms, settings menus, and …

Manish Pushpam September 24, 2025
5 min read
Pyside6 Grouping QRadioButtons for Exclusive Choices in GUIs

Pyside6 Grouping QRadioButtons for Exclusive Choices in GUIs

QRadioButtons are essential for presenting users with mutually exclusive options, like selecting one item from a set of choices. By grouping them, you ensure only one button can be selected …

Manish Pushpam September 19, 2025
5 min read
Implementing QCheckBox for Multiple Selections in PySide6

Implementing QCheckBox for Multiple Selections in PySide6

QCheckBox is a versatile widget in PySide6 that allows users to toggle options on or off, making it ideal for scenarios where multiple independent selections are needed, such as checklists …

Manish Pushpam September 12, 2025
8 min read

Level Up Your Trading

Join thousands of traders mastering algorithmic trading through our curated insights, strategies, and technical tutorials.

THE NEWSLETTER

Weekly algo trading strategies and market insights delivered to your inbox. No spam, just alpha.

YOUTUBE CHANNEL

Watch algo trading tutorials and strategy implementations. Visual learning for the modern algorithmic trader.