messagebox.py 3.61 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# tk common message boxes
#
# this module provides an interface to the native message boxes
# available in Tk 4.2 and newer.
#
# written by Fredrik Lundh, May 1997
#

#
# options (all have default values):
#
# - default: which button to make default (one of the reply codes)
#
# - icon: which icon to display (see below)
#
# - message: the message to display
#
# - parent: which window to place the dialog on top of
#
# - title: dialog title
#
# - type: dialog type; that is, which buttons to display (see below)
#

25
from tkinter.commondialog import Dialog
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

#
# constants

# icons
ERROR = "error"
INFO = "info"
QUESTION = "question"
WARNING = "warning"

# types
ABORTRETRYIGNORE = "abortretryignore"
OK = "ok"
OKCANCEL = "okcancel"
RETRYCANCEL = "retrycancel"
YESNO = "yesno"
YESNOCANCEL = "yesnocancel"

# replies
ABORT = "abort"
RETRY = "retry"
IGNORE = "ignore"
OK = "ok"
CANCEL = "cancel"
YES = "yes"
NO = "no"


#
# message dialog class

class Message(Dialog):
    "A message box"

    command  = "tk_messageBox"


#
# convenience stuff

66 67 68 69
# Rename _icon and _type options to allow overriding them in options
def _show(title=None, message=None, _icon=None, _type=None, **options):
    if _icon and "icon" not in options:    options["icon"] = _icon
    if _type and "type" not in options:    options["type"] = _type
70 71
    if title:   options["title"] = title
    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 76
        if res:
            return YES
77
        return NO
78 79
    # In others we get a Tcl_Obj.
    return str(res)
80 81 82

def showinfo(title=None, message=None, **options):
    "Show an info message"
83
    return _show(title, message, INFO, OK, **options)
84 85 86

def showwarning(title=None, message=None, **options):
    "Show a warning message"
87
    return _show(title, message, WARNING, OK, **options)
88 89 90

def showerror(title=None, message=None, **options):
    "Show an error message"
91
    return _show(title, message, ERROR, OK, **options)
92 93 94

def askquestion(title=None, message=None, **options):
    "Ask a question"
95
    return _show(title, message, QUESTION, YESNO, **options)
96 97 98

def askokcancel(title=None, message=None, **options):
    "Ask if operation should proceed; return true if the answer is ok"
99
    s = _show(title, message, QUESTION, OKCANCEL, **options)
100 101 102 103
    return s == OK

def askyesno(title=None, message=None, **options):
    "Ask a question; return true if the answer is yes"
104
    s = _show(title, message, QUESTION, YESNO, **options)
105 106
    return s == YES

107 108 109 110 111 112 113 114 115
def askyesnocancel(title=None, message=None, **options):
    "Ask a question; return true if the answer is yes, None if cancelled."
    s = _show(title, message, QUESTION, YESNOCANCEL, **options)
    # s might be a Tcl index object, so convert it to a string
    s = str(s)
    if s == CANCEL:
        return None
    return s == YES

116 117
def askretrycancel(title=None, message=None, **options):
    "Ask if operation should be retried; return true if the answer is yes"
118
    s = _show(title, message, WARNING, RETRYCANCEL, **options)
119 120 121 122 123 124 125 126
    return s == RETRY


# --------------------------------------------------------------------
# test stuff

if __name__ == "__main__":

127 128 129 130 131 132 133 134
    print("info", showinfo("Spam", "Egg Information"))
    print("warning", showwarning("Spam", "Egg Warning"))
    print("error", showerror("Spam", "Egg Alert"))
    print("question", askquestion("Spam", "Question?"))
    print("proceed", askokcancel("Spam", "Proceed?"))
    print("yes/no", askyesno("Spam", "Got it?"))
    print("yes/no/cancel", askyesnocancel("Spam", "Want it?"))
    print("try again", askretrycancel("Spam", "Try again?"))