annotate Lib/tkinter/SimpleDialog.py @ 5792:dffabc620e4e legacy-trunk

Tweak re_tests and test_re to differentiate between groups that have no value and groups that are out of bounds.
author Guido van Rossum <guido@python.org>
date Tue, 15 Jul 1997 15:49:52 +0000
parents 15b1b03ade93
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3688
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """A simple but flexible modal dialog box."""
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 from Tkinter import *
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 class SimpleDialog:
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 def __init__(self, master,
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 text='', buttons=[], default=None, cancel=None,
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 title=None, class_=None):
3757
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
12 if class_:
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
13 self.root = Toplevel(master, class_=class_)
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
14 else:
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
15 self.root = Toplevel(master)
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
16 if title:
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
17 self.root.title(title)
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
18 self.root.iconname(title)
3688
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 self.message = Message(self.root, text=text, aspect=400)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 self.message.pack(expand=1, fill=BOTH)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 self.frame = Frame(self.root)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 self.frame.pack()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 self.num = default
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 self.cancel = cancel
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 self.default = default
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 self.root.bind('<Return>', self.return_event)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 for num in range(len(buttons)):
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 s = buttons[num]
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 b = Button(self.frame, text=s,
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 command=(lambda self=self, num=num: self.done(num)))
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 if num == default:
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 b.config(relief=RIDGE, borderwidth=8)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 b.pack(side=LEFT, fill=BOTH, expand=1)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 self.root.protocol('WM_DELETE_WINDOW', self.wm_delete_window)
3757
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
35 self._set_transient(master)
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
36
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
37 def _set_transient(self, master, relx=0.5, rely=0.3):
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
38 widget = self.root
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
39 widget.withdraw() # Remain invisible while we figure out the geometry
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
40 widget.transient(master)
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
41 widget.update_idletasks() # Actualize geometry information
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
42 if master.winfo_ismapped():
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
43 m_width = master.winfo_width()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
44 m_height = master.winfo_height()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
45 m_x = master.winfo_rootx()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
46 m_y = master.winfo_rooty()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
47 else:
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
48 m_width = master.winfo_screenwidth()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
49 m_height = master.winfo_screenheight()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
50 m_x = m_y = 0
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
51 w_width = widget.winfo_reqwidth()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
52 w_height = widget.winfo_reqheight()
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
53 x = m_x + (m_width - w_width) * relx
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
54 y = m_y + (m_height - w_height) * rely
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
55 widget.geometry("+%d+%d" % (x, y))
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
56 widget.deiconify() # Become visible at the desired location
3688
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
57
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 def go(self):
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 self.root.grab_set()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 self.root.mainloop()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 self.root.destroy()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 return self.num
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
63
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 def return_event(self, event):
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 if self.default is None:
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 self.root.bell()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 else:
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 self.done(self.default)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 def wm_delete_window(self):
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 if self.cancel is None:
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 self.root.bell()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 else:
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 self.done(self.cancel)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 def done(self, num):
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 self.num = num
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 self.root.quit()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
79
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
80
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 def test():
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 root = Tk()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 def doit(root=root):
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 d = SimpleDialog(root,
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 text="This is a test dialog. "
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 "Would this have been an actual dialog, "
3757
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
87 "the buttons below would have been glowing "
15b1b03ade93 Don't use tktools, dummy! Reworded test message slightly.
Guido van Rossum <guido@python.org>
parents: 3688
diff changeset
88 "in soft pink light.\n"
3688
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 "Do you believe this?",
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 buttons=["Yes", "No", "Cancel"],
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 default=0,
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 cancel=2,
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 title="Test Dialog")
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 print d.go()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 t = Button(root, text='Test', command=doit)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 t.pack()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 q = Button(root, text='Quit', command=t.quit)
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 q.pack()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 t.mainloop()
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
100
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
101
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 if __name__ == '__main__':
a79b8d81997f new simple dialog module, incompatible
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 test()