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