blob: 25071fe591a36d3202d15271a5e963d22bc5d144 [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
66def _show(title=None, message=None, icon=None, type=None, **options):
67 if icon: options["icon"] = icon
68 if type: options["type"] = type
69 if title: options["title"] = title
70 if message: options["message"] = message
Martin v. Löwisb0c670c2004-09-18 16:01:23 +000071 res = Message(**options).show()
72 # In some Tcl installations, Tcl converts yes/no into a boolean
73 if isinstance(res, bool):
74 if res: return YES
75 return NO
76 return res
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000077
78def showinfo(title=None, message=None, **options):
79 "Show an info message"
Raymond Hettingerff41c482003-04-06 09:01:11 +000080 return _show(title, message, INFO, OK, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000081
82def showwarning(title=None, message=None, **options):
83 "Show a warning message"
Raymond Hettingerff41c482003-04-06 09:01:11 +000084 return _show(title, message, WARNING, OK, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000085
86def showerror(title=None, message=None, **options):
87 "Show an error message"
Raymond Hettingerff41c482003-04-06 09:01:11 +000088 return _show(title, message, ERROR, OK, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000089
90def askquestion(title=None, message=None, **options):
91 "Ask a question"
Raymond Hettingerff41c482003-04-06 09:01:11 +000092 return _show(title, message, QUESTION, YESNO, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000093
94def askokcancel(title=None, message=None, **options):
95 "Ask if operation should proceed; return true if the answer is ok"
Raymond Hettingerff41c482003-04-06 09:01:11 +000096 s = _show(title, message, QUESTION, OKCANCEL, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +000097 return s == OK
98
99def askyesno(title=None, message=None, **options):
100 "Ask a question; return true if the answer is yes"
Raymond Hettingerff41c482003-04-06 09:01:11 +0000101 s = _show(title, message, QUESTION, YESNO, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +0000102 return s == YES
103
104def askretrycancel(title=None, message=None, **options):
105 "Ask if operation should be retried; return true if the answer is yes"
Raymond Hettingerff41c482003-04-06 09:01:11 +0000106 s = _show(title, message, WARNING, RETRYCANCEL, **options)
Guido van Rossum1e8c8a21997-07-19 20:02:36 +0000107 return s == RETRY
108
109
110# --------------------------------------------------------------------
111# test stuff
112
113if __name__ == "__main__":
114
115 print "info", showinfo("Spam", "Egg Information")
116 print "warning", showwarning("Spam", "Egg Warning")
117 print "error", showerror("Spam", "Egg Alert")
118 print "question", askquestion("Spam", "Question?")
119 print "proceed", askokcancel("Spam", "Proceed?")
120 print "yes/no", askyesno("Spam", "Got it?")
121 print "try again", askretrycancel("Spam", "Try again?")