blob: d14ca86febc0bf592d5d3a9a18fc96b7efa50a5a [file] [log] [blame]
Guido van Rossum1e8c8a21997-07-19 20:02:36 +00001# 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
25from tkCommonDialog import Dialog
26
27#
28# constants
29
30# icons
31ERROR = "error"
32INFO = "info"
33QUESTION = "question"
34WARNING = "warning"
35
36# types
37ABORTRETRYIGNORE = "abortretryignore"
38OK = "ok"
39OKCANCEL = "okcancel"
40RETRYCANCEL = "retrycancel"
41YESNO = "yesno"
42YESNOCANCEL = "yesnocancel"
43
44# replies
45ABORT = "abort"
46RETRY = "retry"
47IGNORE = "ignore"
48OK = "ok"
49CANCEL = "cancel"
50YES = "yes"
51NO = "no"
52
53
54#
55# message dialog class
56
57class Message(Dialog):
58 "A message box"
59
60 command = "tk_messageBox"
61
62
63#
64# convenience stuff
65
Thomas Wouters0e3f5912006-08-11 14:57:12 +000066# Rename _icon and _type options to allow overriding them in options
67def _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
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000070 if title: options["title"] = title
71 if message: options["message"] = message
Martin v. Löwisb0c670c2004-09-18 16:01:23 +000072 res = Message(**options).show()
73 # In some Tcl installations, Tcl converts yes/no into a boolean
74 if isinstance(res, bool):
75 if res: return YES
76 return NO
77 return res
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000078
79def showinfo(title=None, message=None, **options):
80 "Show an info message"
Raymond Hettingerff41c482003-04-06 09:01:11 +000081 return _show(title, message, INFO, OK, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000082
83def showwarning(title=None, message=None, **options):
84 "Show a warning message"
Raymond Hettingerff41c482003-04-06 09:01:11 +000085 return _show(title, message, WARNING, OK, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000086
87def showerror(title=None, message=None, **options):
88 "Show an error message"
Raymond Hettingerff41c482003-04-06 09:01:11 +000089 return _show(title, message, ERROR, OK, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000090
91def askquestion(title=None, message=None, **options):
92 "Ask a question"
Raymond Hettingerff41c482003-04-06 09:01:11 +000093 return _show(title, message, QUESTION, YESNO, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000094
95def askokcancel(title=None, message=None, **options):
96 "Ask if operation should proceed; return true if the answer is ok"
Raymond Hettingerff41c482003-04-06 09:01:11 +000097 s = _show(title, message, QUESTION, OKCANCEL, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000098 return s == OK
99
100def askyesno(title=None, message=None, **options):
101 "Ask a question; return true if the answer is yes"
Raymond Hettingerff41c482003-04-06 09:01:11 +0000102 s = _show(title, message, QUESTION, YESNO, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +0000103 return s == YES
104
Thomas Wouters89f507f2006-12-13 04:49:30 +0000105def askyesnocancel(title=None, message=None, **options):
106 "Ask a question; return true if the answer is yes, None if cancelled."
107 s = _show(title, message, QUESTION, YESNOCANCEL, **options)
108 # s might be a Tcl index object, so convert it to a string
109 s = str(s)
110 if s == CANCEL:
111 return None
112 return s == YES
113
Guido van Rossum1e8c8a21997-07-19 20:02:36 +0000114def askretrycancel(title=None, message=None, **options):
115 "Ask if operation should be retried; return true if the answer is yes"
Raymond Hettingerff41c482003-04-06 09:01:11 +0000116 s = _show(title, message, WARNING, RETRYCANCEL, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +0000117 return s == RETRY
118
119
120# --------------------------------------------------------------------
121# test stuff
122
123if __name__ == "__main__":
124
125 print "info", showinfo("Spam", "Egg Information")
126 print "warning", showwarning("Spam", "Egg Warning")
127 print "error", showerror("Spam", "Egg Alert")
128 print "question", askquestion("Spam", "Question?")
129 print "proceed", askokcancel("Spam", "Proceed?")
130 print "yes/no", askyesno("Spam", "Got it?")
Thomas Wouters89f507f2006-12-13 04:49:30 +0000131 print "yes/no/cancel", askyesnocancel("Spam", "Want it?")
Guido van Rossum1e8c8a21997-07-19 20:02:36 +0000132 print "try again", askretrycancel("Spam", "Try again?")