blob: d82773d902954cc68c6932591a95663b8196890a [file] [log] [blame]
Guido van Rossum990e6191996-06-17 17:14:46 +00001"""A simple but flexible modal dialog box."""
2
3
4from Tkinter import *
5import tktools
6
7
8class SimpleDialog:
9
10 def __init__(self, master,
11 text='', buttons=[], default=None, cancel=None,
12 title=None, class_=None):
13 self.root = tktools.make_toplevel(master, title=title, class_=class_)
14 self.message = Message(self.root, text=text, aspect=400)
15 self.message.pack(expand=1, fill=BOTH)
16 self.frame = Frame(self.root)
17 self.frame.pack()
18 self.num = default
19 self.cancel = cancel
20 self.default = default
21 self.root.bind('<Return>', self.return_event)
22 for num in range(len(buttons)):
23 s = buttons[num]
24 b = Button(self.frame, text=s,
25 command=(lambda self=self, num=num: self.done(num)))
26 if num == default:
27 b.config(relief=RIDGE, borderwidth=8)
28 b.pack(side=LEFT, fill=BOTH, expand=1)
29 self.root.protocol('WM_DELETE_WINDOW', self.wm_delete_window)
30 tktools.set_transient(self.root, master)
31
32 def go(self):
33 self.root.grab_set()
34 self.root.mainloop()
35 self.root.destroy()
36 return self.num
37
38 def return_event(self, event):
39 if self.default is None:
40 self.root.bell()
41 else:
42 self.done(self.default)
43
44 def wm_delete_window(self):
45 if self.cancel is None:
46 self.root.bell()
47 else:
48 self.done(self.cancel)
49
50 def done(self, num):
51 self.num = num
52 self.root.quit()
53
54
55def test():
56 root = Tk()
57 def doit(root=root):
58 d = SimpleDialog(root,
59 text="This is a test dialog. "
60 "Would this have been an actual dialog, "
61 "the buttons below would have glowed "
62 "in soft pink light. "
63 "Do you believe this?",
64 buttons=["Yes", "No", "Cancel"],
65 default=0,
66 cancel=2,
67 title="Test Dialog")
68 print d.go()
69 t = Button(root, text='Test', command=doit)
70 t.pack()
71 q = Button(root, text='Quit', command=t.quit)
72 q.pack()
73 t.mainloop()
74
75
76if __name__ == '__main__':
77 test()