ยปCore Development>Code coverage>Lib/lib-tk/SimpleDialog.py

Python code coverage for Lib/lib-tk/SimpleDialog.py

#countcontent
1n/a"""A simple but flexible modal dialog box."""
2n/a
3n/a
4n/afrom Tkinter import *
5n/a
6n/a
7n/aclass SimpleDialog:
8n/a
9n/a def __init__(self, master,
10n/a text='', buttons=[], default=None, cancel=None,
11n/a title=None, class_=None):
12n/a if class_:
13n/a self.root = Toplevel(master, class_=class_)
14n/a else:
15n/a self.root = Toplevel(master)
16n/a if title:
17n/a self.root.title(title)
18n/a self.root.iconname(title)
19n/a self.message = Message(self.root, text=text, aspect=400)
20n/a self.message.pack(expand=1, fill=BOTH)
21n/a self.frame = Frame(self.root)
22n/a self.frame.pack()
23n/a self.num = default
24n/a self.cancel = cancel
25n/a self.default = default
26n/a self.root.bind('<Return>', self.return_event)
27n/a for num in range(len(buttons)):
28n/a s = buttons[num]
29n/a b = Button(self.frame, text=s,
30n/a command=(lambda self=self, num=num: self.done(num)))
31n/a if num == default:
32n/a b.config(relief=RIDGE, borderwidth=8)
33n/a b.pack(side=LEFT, fill=BOTH, expand=1)
34n/a self.root.protocol('WM_DELETE_WINDOW', self.wm_delete_window)
35n/a self._set_transient(master)
36n/a
37n/a def _set_transient(self, master, relx=0.5, rely=0.3):
38n/a widget = self.root
39n/a widget.withdraw() # Remain invisible while we figure out the geometry
40n/a widget.transient(master)
41n/a widget.update_idletasks() # Actualize geometry information
42n/a if master.winfo_ismapped():
43n/a m_width = master.winfo_width()
44n/a m_height = master.winfo_height()
45n/a m_x = master.winfo_rootx()
46n/a m_y = master.winfo_rooty()
47n/a else:
48n/a m_width = master.winfo_screenwidth()
49n/a m_height = master.winfo_screenheight()
50n/a m_x = m_y = 0
51n/a w_width = widget.winfo_reqwidth()
52n/a w_height = widget.winfo_reqheight()
53n/a x = m_x + (m_width - w_width) * relx
54n/a y = m_y + (m_height - w_height) * rely
55n/a if x+w_width > master.winfo_screenwidth():
56n/a x = master.winfo_screenwidth() - w_width
57n/a elif x < 0:
58n/a x = 0
59n/a if y+w_height > master.winfo_screenheight():
60n/a y = master.winfo_screenheight() - w_height
61n/a elif y < 0:
62n/a y = 0
63n/a widget.geometry("+%d+%d" % (x, y))
64n/a widget.deiconify() # Become visible at the desired location
65n/a
66n/a def go(self):
67n/a self.root.wait_visibility()
68n/a self.root.grab_set()
69n/a self.root.mainloop()
70n/a self.root.destroy()
71n/a return self.num
72n/a
73n/a def return_event(self, event):
74n/a if self.default is None:
75n/a self.root.bell()
76n/a else:
77n/a self.done(self.default)
78n/a
79n/a def wm_delete_window(self):
80n/a if self.cancel is None:
81n/a self.root.bell()
82n/a else:
83n/a self.done(self.cancel)
84n/a
85n/a def done(self, num):
86n/a self.num = num
87n/a self.root.quit()
88n/a
89n/a
90n/aif __name__ == '__main__':
91n/a
92n/a def test():
93n/a root = Tk()
94n/a def doit(root=root):
95n/a d = SimpleDialog(root,
96n/a text="This is a test dialog. "
97n/a "Would this have been an actual dialog, "
98n/a "the buttons below would have been glowing "
99n/a "in soft pink light.\n"
100n/a "Do you believe this?",
101n/a buttons=["Yes", "No", "Cancel"],
102n/a default=0,
103n/a cancel=2,
104n/a title="Test Dialog")
105n/a print d.go()
106n/a t = Button(root, text='Test', command=doit)
107n/a t.pack()
108n/a q = Button(root, text='Quit', command=t.quit)
109n/a q.pack()
110n/a t.mainloop()
111n/a
112n/a test()