"""A simple but flexible modal dialog box.""" from Tkinter import * class SimpleDialog: def __init__(self, master, text='', buttons=[], default=None, cancel=None, title=None, class_=None): if class_: self.root = Toplevel(master, class_=class_) else: self.root = Toplevel(master) if title: self.root.title(title) 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.frame.pack() self.num = default self.cancel = cancel self.default = default self.root.bind('<Return>', self.return_event) for num in range(len(buttons)): s = buttons[num] b = Button(self.frame, text=s, command=(lambda self=self, num=num: self.done(num))) if num == default: 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 = self.root widget.withdraw() # Remain invisible while we figure out the geometry widget.transient(master) 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() else: m_width = master.winfo_screenwidth() m_height = master.winfo_screenheight() m_x = m_y = 0 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 elif x < 0: x = 0 if y+w_height > master.winfo_screenheight(): y = master.winfo_screenheight() - w_height elif y < 0: y = 0 widget.geometry("+%d+%d" % (x, y)) widget.deiconify() # Become visible at the desired location def go(self): self.root.wait_visibility() self.root.grab_set() self.root.mainloop() self.root.destroy() return self.num def return_event(self, event): if self.default is None: self.root.bell() else: self.done(self.default) def wm_delete_window(self): if self.cancel is None: self.root.bell() else: self.done(self.cancel) def done(self, num): self.num = num self.root.quit() if __name__ == '__main__': def test(): root = Tk() def doit(root=root): d = SimpleDialog(root, text="This is a test dialog. " "Would this have been an actual dialog, " "the buttons below would have been glowing " "in soft pink light.\n" "Do you believe this?", buttons=["Yes", "No", "Cancel"], default=0, cancel=2, title="Test Dialog") print d.go() t = Button(root, text='Test', command=doit) t.pack() q = Button(root, text='Quit', command=t.quit) q.pack() t.mainloop() test()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
test | Folder | 0755 |
|
|
.Canvas.pyo.40009 | File | 15.2 KB | 0644 |
|
.Dialog.pyo.40009 | File | 1.88 KB | 0644 |
|
.FileDialog.pyo.40009 | File | 9.5 KB | 0644 |
|
.ScrolledText.pyo.40009 | File | 2.6 KB | 0644 |
|
.SimpleDialog.pyo.40009 | File | 4.24 KB | 0644 |
|
.Tix.pyo.40009 | File | 94.32 KB | 0644 |
|
.Tkconstants.pyo.40009 | File | 2.19 KB | 0644 |
|
.Tkdnd.pyo.40009 | File | 12.52 KB | 0644 |
|
.Tkinter.pyo.40009 | File | 192.89 KB | 0644 |
|
.tkColorChooser.pyo.40009 | File | 1.39 KB | 0644 |
|
.tkCommonDialog.pyo.40009 | File | 1.48 KB | 0644 |
|
.tkFileDialog.pyo.40009 | File | 5.04 KB | 0644 |
|
.tkFont.pyo.40009 | File | 6.93 KB | 0644 |
|
.tkMessageBox.pyo.40009 | File | 3.8 KB | 0644 |
|
.tkSimpleDialog.pyo.40009 | File | 8.9 KB | 0644 |
|
.ttk.pyo.40009 | File | 60.58 KB | 0644 |
|
.turtle.pyo.40009 | File | 136.15 KB | 0644 |
|
Canvas.py | File | 7.29 KB | 0644 |
|
Canvas.pyc | File | 15.2 KB | 0644 |
|
Canvas.pyo | File | 15.2 KB | 0644 |
|
Dialog.py | File | 1.53 KB | 0644 |
|
Dialog.pyc | File | 1.88 KB | 0644 |
|
Dialog.pyo | File | 1.88 KB | 0644 |
|
FileDialog.py | File | 8.62 KB | 0644 |
|
FileDialog.pyc | File | 9.5 KB | 0644 |
|
FileDialog.pyo | File | 9.5 KB | 0644 |
|
FixTk.py | File | 2.87 KB | 0644 |
|
FixTk.pyc | File | 1.95 KB | 0644 |
|
FixTk.pyo | File | 1.89 KB | 0644 |
|
ScrolledText.py | File | 1.79 KB | 0644 |
|
ScrolledText.pyc | File | 2.6 KB | 0644 |
|
ScrolledText.pyo | File | 2.6 KB | 0644 |
|
SimpleDialog.py | File | 3.64 KB | 0644 |
|
SimpleDialog.pyc | File | 4.24 KB | 0644 |
|
SimpleDialog.pyo | File | 4.24 KB | 0644 |
|
Tix.py | File | 75.93 KB | 0644 |
|
Tix.pyc | File | 94.32 KB | 0644 |
|
Tix.pyo | File | 94.32 KB | 0644 |
|
Tkconstants.py | File | 1.46 KB | 0644 |
|
Tkconstants.pyc | File | 2.19 KB | 0644 |
|
Tkconstants.pyo | File | 2.19 KB | 0644 |
|
Tkdnd.py | File | 11.22 KB | 0644 |
|
Tkdnd.pyc | File | 12.52 KB | 0644 |
|
Tkdnd.pyo | File | 12.52 KB | 0644 |
|
Tkinter.py | File | 154.14 KB | 0644 |
|
Tkinter.pyc | File | 192.89 KB | 0644 |
|
Tkinter.pyo | File | 192.89 KB | 0644 |
|
tkColorChooser.py | File | 1.74 KB | 0644 |
|
tkColorChooser.pyc | File | 1.39 KB | 0644 |
|
tkColorChooser.pyo | File | 1.39 KB | 0644 |
|
tkCommonDialog.py | File | 1.38 KB | 0644 |
|
tkCommonDialog.pyc | File | 1.48 KB | 0644 |
|
tkCommonDialog.pyo | File | 1.48 KB | 0644 |
|
tkFileDialog.py | File | 5.59 KB | 0644 |
|
tkFileDialog.pyc | File | 5.04 KB | 0644 |
|
tkFileDialog.pyo | File | 5.04 KB | 0644 |
|
tkFont.py | File | 5.96 KB | 0644 |
|
tkFont.pyc | File | 6.93 KB | 0644 |
|
tkFont.pyo | File | 6.93 KB | 0644 |
|
tkMessageBox.py | File | 3.6 KB | 0644 |
|
tkMessageBox.pyc | File | 3.8 KB | 0644 |
|
tkMessageBox.pyo | File | 3.8 KB | 0644 |
|
tkSimpleDialog.py | File | 7.54 KB | 0644 |
|
tkSimpleDialog.pyc | File | 8.9 KB | 0644 |
|
tkSimpleDialog.pyo | File | 8.9 KB | 0644 |
|
ttk.py | File | 54.07 KB | 0644 |
|
ttk.pyc | File | 60.58 KB | 0644 |
|
ttk.pyo | File | 60.58 KB | 0644 |
|
turtle.py | File | 135.63 KB | 0644 |
|
turtle.pyc | File | 136.15 KB | 0644 |
|
turtle.pyo | File | 136.15 KB | 0644 |
|