"""A simple but flexible modal dialog box."""
def __init__(self
, master
,
text
='', buttons
=[], default
=None, cancel
=None,
title
=None, class_
=None):
self
.root
= Toplevel(master
, class_
=class_
)
self
.root
= Toplevel(master
)
self
.root
.iconname(title
)
self
.message
= Message(self
.root
, text
=text
, aspect
=400)
self
.message
.pack(expand
=1, fill
=BOTH
)
self
.frame
= Frame(self
.root
)
self
.root
.bind('<Return>', self
.return_event
)
for num
in range(len(buttons
)):
b
= Button(self
.frame
, text
=s
,
command
=(lambda self
=self
, num
=num
: self
.done(num
)))
b
.config(relief
=RIDGE
, borderwidth
=8)
b
.pack(side
=LEFT
, fill
=BOTH
, expand
=1)
self
.root
.protocol('WM_DELETE_WINDOW', self
.wm_delete_window
)
self
._set
_transient
(master
)
def _set_transient(self
, master
, relx
=0.5, rely
=0.3):
widget
.withdraw() # Remain invisible while we figure out the geometry
widget
.update_idletasks() # Actualize geometry information
if master
.winfo_ismapped():
m_width
= master
.winfo_width()
m_height
= master
.winfo_height()
m_x
= master
.winfo_rootx()
m_y
= master
.winfo_rooty()
m_width
= master
.winfo_screenwidth()
m_height
= master
.winfo_screenheight()
w_width
= widget
.winfo_reqwidth()
w_height
= widget
.winfo_reqheight()
x
= m_x
+ (m_width
- w_width
) * relx
y
= m_y
+ (m_height
- w_height
) * rely
if x
+w_width
> master
.winfo_screenwidth():
x
= master
.winfo_screenwidth() - w_width
if y
+w_height
> master
.winfo_screenheight():
y
= master
.winfo_screenheight() - w_height
widget
.geometry("+%d+%d" % (x
, y
))
widget
.deiconify() # Become visible at the desired location
self
.root
.wait_visibility()
def return_event(self
, event
):
def wm_delete_window(self
):
if __name__
== '__main__':
text
="This is a test dialog. "
"Would this have been an actual dialog, "
"the buttons below would have been glowing "
buttons
=["Yes", "No", "Cancel"],
t
= Button(root
, text
='Test', command
=doit
)
q
= Button(root
, text
='Quit', command
=t
.quit
)