(root)/
Python-3.11.7/
Lib/
tkinter/
messagebox.py
       1  # tk common message boxes
       2  #
       3  # this module provides an interface to the native message boxes
       4  # available in Tk 4.2 and newer.
       5  #
       6  # written by Fredrik Lundh, May 1997
       7  #
       8  
       9  #
      10  # options (all have default values):
      11  #
      12  # - default: which button to make default (one of the reply codes)
      13  #
      14  # - icon: which icon to display (see below)
      15  #
      16  # - message: the message to display
      17  #
      18  # - parent: which window to place the dialog on top of
      19  #
      20  # - title: dialog title
      21  #
      22  # - type: dialog type; that is, which buttons to display (see below)
      23  #
      24  
      25  from tkinter.commondialog import Dialog
      26  
      27  __all__ = ["showinfo", "showwarning", "showerror",
      28             "askquestion", "askokcancel", "askyesno",
      29             "askyesnocancel", "askretrycancel"]
      30  
      31  #
      32  # constants
      33  
      34  # icons
      35  ERROR = "error"
      36  INFO = "info"
      37  QUESTION = "question"
      38  WARNING = "warning"
      39  
      40  # types
      41  ABORTRETRYIGNORE = "abortretryignore"
      42  OK = "ok"
      43  OKCANCEL = "okcancel"
      44  RETRYCANCEL = "retrycancel"
      45  YESNO = "yesno"
      46  YESNOCANCEL = "yesnocancel"
      47  
      48  # replies
      49  ABORT = "abort"
      50  RETRY = "retry"
      51  IGNORE = "ignore"
      52  OK = "ok"
      53  CANCEL = "cancel"
      54  YES = "yes"
      55  NO = "no"
      56  
      57  
      58  #
      59  # message dialog class
      60  
      61  class ESC[4;38;5;81mMessage(ESC[4;38;5;149mDialog):
      62      "A message box"
      63  
      64      command  = "tk_messageBox"
      65  
      66  
      67  #
      68  # convenience stuff
      69  
      70  # Rename _icon and _type options to allow overriding them in options
      71  def _show(title=None, message=None, _icon=None, _type=None, **options):
      72      if _icon and "icon" not in options:    options["icon"] = _icon
      73      if _type and "type" not in options:    options["type"] = _type
      74      if title:   options["title"] = title
      75      if message: options["message"] = message
      76      res = Message(**options).show()
      77      # In some Tcl installations, yes/no is converted into a boolean.
      78      if isinstance(res, bool):
      79          if res:
      80              return YES
      81          return NO
      82      # In others we get a Tcl_Obj.
      83      return str(res)
      84  
      85  
      86  def showinfo(title=None, message=None, **options):
      87      "Show an info message"
      88      return _show(title, message, INFO, OK, **options)
      89  
      90  
      91  def showwarning(title=None, message=None, **options):
      92      "Show a warning message"
      93      return _show(title, message, WARNING, OK, **options)
      94  
      95  
      96  def showerror(title=None, message=None, **options):
      97      "Show an error message"
      98      return _show(title, message, ERROR, OK, **options)
      99  
     100  
     101  def askquestion(title=None, message=None, **options):
     102      "Ask a question"
     103      return _show(title, message, QUESTION, YESNO, **options)
     104  
     105  
     106  def askokcancel(title=None, message=None, **options):
     107      "Ask if operation should proceed; return true if the answer is ok"
     108      s = _show(title, message, QUESTION, OKCANCEL, **options)
     109      return s == OK
     110  
     111  
     112  def askyesno(title=None, message=None, **options):
     113      "Ask a question; return true if the answer is yes"
     114      s = _show(title, message, QUESTION, YESNO, **options)
     115      return s == YES
     116  
     117  
     118  def askyesnocancel(title=None, message=None, **options):
     119      "Ask a question; return true if the answer is yes, None if cancelled."
     120      s = _show(title, message, QUESTION, YESNOCANCEL, **options)
     121      # s might be a Tcl index object, so convert it to a string
     122      s = str(s)
     123      if s == CANCEL:
     124          return None
     125      return s == YES
     126  
     127  
     128  def askretrycancel(title=None, message=None, **options):
     129      "Ask if operation should be retried; return true if the answer is yes"
     130      s = _show(title, message, WARNING, RETRYCANCEL, **options)
     131      return s == RETRY
     132  
     133  
     134  # --------------------------------------------------------------------
     135  # test stuff
     136  
     137  if __name__ == "__main__":
     138  
     139      print("info", showinfo("Spam", "Egg Information"))
     140      print("warning", showwarning("Spam", "Egg Warning"))
     141      print("error", showerror("Spam", "Egg Alert"))
     142      print("question", askquestion("Spam", "Question?"))
     143      print("proceed", askokcancel("Spam", "Proceed?"))
     144      print("yes/no", askyesno("Spam", "Got it?"))
     145      print("yes/no/cancel", askyesnocancel("Spam", "Want it?"))
     146      print("try again", askretrycancel("Spam", "Try again?"))