模式对话框(Modal Dialog) 是指对话框打开后, 用户在关闭此对话框前无法对父窗口进行任何鼠标和键盘操作.
以下代码实现了一个模式对话框类(Dialog
), 以下代码可从我的github仓库中获得:
# dialog.py
from tkinter import *
class Dialog(Toplevel):
def __init__(self, master=None, **kw) -> None:
super().__init__(master, **kw)
self.protocol("WM_DELETE_WINDOW", self.destroy) # intercept close button
self.transient(master) # dialog window is related to main
self.wait_visibility() # can't grab until window appears, so we wait
self.grab_set() # ensure all input goes to our window
# place dialog below parent if running htest
self.geometry("+%d+%d" % (
master.winfo_rootx()+30,
master.winfo_rooty()+30))
def destroy(self):
self.grab_release()
super().destroy()
创建你自己的对话框类并继承Dialog
即可.
如果你需要在关闭对话框前完成某些操作, 请重载Dialog.destroy()
函数.
# mydialog.py
from dialog import Dialog
class MyDialog(Dialog):
def __init__(self, master=None, **kw) -> None:
super().__init__(master, **kw)
self.geometry('400x300')
def destroy(self):
print('good bye')
return super().destroy()
if __name__ == '__main__':
root = Tk()
dlg = MyDialog(root)
root.mainloop()
如果你想研究上述每行代码的含义和实现原理, 请查看tkinter教程.