Home | History | Annotate | Download | only in lib-tk
      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 tkCommonDialog import Dialog
     26 
     27 #
     28 # constants
     29 
     30 # icons
     31 ERROR = "error"
     32 INFO = "info"
     33 QUESTION = "question"
     34 WARNING = "warning"
     35 
     36 # types
     37 ABORTRETRYIGNORE = "abortretryignore"
     38 OK = "ok"
     39 OKCANCEL = "okcancel"
     40 RETRYCANCEL = "retrycancel"
     41 YESNO = "yesno"
     42 YESNOCANCEL = "yesnocancel"
     43 
     44 # replies
     45 ABORT = "abort"
     46 RETRY = "retry"
     47 IGNORE = "ignore"
     48 OK = "ok"
     49 CANCEL = "cancel"
     50 YES = "yes"
     51 NO = "no"
     52 
     53 
     54 #
     55 # message dialog class
     56 
     57 class Message(Dialog):
     58     "A message box"
     59 
     60     command  = "tk_messageBox"
     61 
     62 
     63 #
     64 # convenience stuff
     65 
     66 # Rename _icon and _type options to allow overriding them in options
     67 def _show(title=None, message=None, _icon=None, _type=None, **options):
     68     if _icon and "icon" not in options:    options["icon"] = _icon
     69     if _type and "type" not in options:    options["type"] = _type
     70     if title:   options["title"] = title
     71     if message: options["message"] = message
     72     res = Message(**options).show()
     73     # In some Tcl installations, yes/no is converted into a boolean.
     74     if isinstance(res, bool):
     75         if res:
     76             return YES
     77         return NO
     78     # In others we get a Tcl_Obj.
     79     return str(res)
     80 
     81 def showinfo(title=None, message=None, **options):
     82     "Show an info message"
     83     return _show(title, message, INFO, OK, **options)
     84 
     85 def showwarning(title=None, message=None, **options):
     86     "Show a warning message"
     87     return _show(title, message, WARNING, OK, **options)
     88 
     89 def showerror(title=None, message=None, **options):
     90     "Show an error message"
     91     return _show(title, message, ERROR, OK, **options)
     92 
     93 def askquestion(title=None, message=None, **options):
     94     "Ask a question"
     95     return _show(title, message, QUESTION, YESNO, **options)
     96 
     97 def askokcancel(title=None, message=None, **options):
     98     "Ask if operation should proceed; return true if the answer is ok"
     99     s = _show(title, message, QUESTION, OKCANCEL, **options)
    100     return s == OK
    101 
    102 def askyesno(title=None, message=None, **options):
    103     "Ask a question; return true if the answer is yes"
    104     s = _show(title, message, QUESTION, YESNO, **options)
    105     return s == YES
    106 
    107 def askyesnocancel(title=None, message=None, **options):
    108     "Ask a question; return true if the answer is yes, None if cancelled."
    109     s = _show(title, message, QUESTION, YESNOCANCEL, **options)
    110     # s might be a Tcl index object, so convert it to a string
    111     s = str(s)
    112     if s == CANCEL:
    113         return None
    114     return s == YES
    115 
    116 def askretrycancel(title=None, message=None, **options):
    117     "Ask if operation should be retried; return true if the answer is yes"
    118     s = _show(title, message, WARNING, RETRYCANCEL, **options)
    119     return s == RETRY
    120 
    121 
    122 # --------------------------------------------------------------------
    123 # test stuff
    124 
    125 if __name__ == "__main__":
    126 
    127     print "info", showinfo("Spam", "Egg Information")
    128     print "warning", showwarning("Spam", "Egg Warning")
    129     print "error", showerror("Spam", "Egg Alert")
    130     print "question", askquestion("Spam", "Question?")
    131     print "proceed", askokcancel("Spam", "Proceed?")
    132     print "yes/no", askyesno("Spam", "Got it?")
    133     print "yes/no/cancel", askyesnocancel("Spam", "Want it?")
    134     print "try again", askretrycancel("Spam", "Try again?")
    135