:mod:`!tkinter.messagebox` --- Tkinter message prompts
======================================================

.. module:: tkinter.messagebox
   :synopsis: Various types of alert dialogs

**Source code:** :source:`Lib/tkinter/messagebox.py`

--------------

The :mod:`!tkinter.messagebox` module provides a template base class as well as
a variety of convenience methods for commonly used configurations. The message
boxes are modal and will return a subset of (``True``, ``False``, ``None``,
:data:`OK`, :data:`CANCEL`, :data:`YES`, :data:`NO`) based on
the user's selection. Common message box styles and layouts include but are not
limited to:

.. figure:: tk_msg.png

.. class:: Message(master=None, **options)

   Create a message window with an application-specified message, an icon
   and a set of buttons.
   Each of the buttons in the message window is identified by a unique symbolic name (see the *type* options).

   The following options are supported:

      *command*
         Specifies the function to invoke when the user closes the dialog.
         The name of the button clicked by the user to close the dialog is
         passed as argument.
         This is only available on macOS.

      *default*
         Gives the :ref:`symbolic name <messagebox-buttons>` of the default button
         for this message window (:data:`OK`, :data:`CANCEL`, and so on).
         If this option is not specified, the first button in the dialog will
         be made the default.

      *detail*
         Specifies an auxiliary message to the main message given by the
         *message* option.
         The message detail will be presented beneath the main message and,
         where supported by the OS, in a less emphasized font than the main
         message.

      *icon*
         Specifies an :ref:`icon <messagebox-icons>` to display.
         If this option is not specified, then the :data:`INFO` icon will be
         displayed.

      *message*
         Specifies the message to display in this message box.
         The default value is an empty string.

      *parent*
         Makes the specified window the logical parent of the message box.
         The message box is displayed on top of its parent window.

      *title*
         Specifies a string to display as the title of the message box.
         This option is ignored on macOS, where platform guidelines forbid
         the use of a title on this kind of dialog.

      *type*
         Arranges for a :ref:`predefined set of buttons <messagebox-types>`
         to be displayed.

   .. method:: show(**options)

      Display a message window and wait for the user to select one of the buttons. Then return the symbolic name of the selected button.
      Keyword arguments can override options specified in the constructor.


**Information message box**

.. function:: showinfo(title=None, message=None, **options)

   Creates and displays an information message box with the specified title
   and message.

**Warning message boxes**

.. function:: showwarning(title=None, message=None, **options)

   Creates and displays a warning message box with the specified title
   and message.

.. function:: showerror(title=None, message=None, **options)

   Creates and displays an error message box with the specified title
   and message.

**Question message boxes**

.. function:: askquestion(title=None, message=None, *, type=YESNO, **options)

   Ask a question. By default shows buttons :data:`YES` and :data:`NO`.
   Returns the symbolic name of the selected button.

.. function:: askokcancel(title=None, message=None, **options)

   Ask if operation should proceed. Shows buttons :data:`OK` and :data:`CANCEL`.
   Returns ``True`` if the answer is ok and ``False`` otherwise.

.. function:: askretrycancel(title=None, message=None, **options)

   Ask if operation should be retried. Shows buttons :data:`RETRY` and :data:`CANCEL`.
   Return ``True`` if the answer is yes and ``False`` otherwise.

.. function:: askyesno(title=None, message=None, **options)

   Ask a question. Shows buttons :data:`YES` and :data:`NO`.
   Returns ``True`` if the answer is yes and ``False`` otherwise.

.. function:: askyesnocancel(title=None, message=None, **options)

   Ask a question. Shows buttons :data:`YES`, :data:`NO` and :data:`CANCEL`.
   Return ``True`` if the answer is yes, ``None`` if cancelled, and ``False``
   otherwise.


.. _messagebox-buttons:

Symbolic names of buttons:

.. data:: ABORT
   :value: 'abort'
.. data:: RETRY
   :value: 'retry'
.. data:: IGNORE
   :value: 'ignore'
.. data:: OK
   :value: 'ok'
.. data:: CANCEL
   :value: 'cancel'
.. data:: YES
   :value: 'yes'
.. data:: NO
   :value: 'no'

.. _messagebox-types:

Predefined sets of buttons:

.. data:: ABORTRETRYIGNORE
   :value: 'abortretryignore'

   Displays three buttons whose symbolic names are :data:`ABORT`,
   :data:`RETRY` and :data:`IGNORE`.

.. data:: OK
   :value: 'ok'
   :noindex:

   Displays one button whose symbolic name is :data:`OK`.

.. data:: OKCANCEL
   :value: 'okcancel'

   Displays two buttons whose symbolic names are :data:`OK` and
   :data:`CANCEL`.

.. data:: RETRYCANCEL
   :value: 'retrycancel'

   Displays two buttons whose symbolic names are :data:`RETRY` and
   :data:`CANCEL`.

.. data:: YESNO
   :value: 'yesno'

   Displays two buttons whose symbolic names are :data:`YES` and
   :data:`NO`.

.. data:: YESNOCANCEL
   :value: 'yesnocancel'

   Displays three buttons whose symbolic names are :data:`YES`,
   :data:`NO` and :data:`CANCEL`.

.. _messagebox-icons:

Icon images:

.. data:: ERROR
   :value: 'error'
.. data:: INFO
   :value: 'info'
.. data:: QUESTION
   :value: 'question'
.. data:: WARNING
   :value: 'warning'
