Tim*_*son 5 python dialog tkinter non-modal
我正在使用一个名为customDialog的类,它基于http://effbot.org/tkinterbook/tkinter-dialog-windows.htm
.标准代码创建了一个子类Toplevel,并创建模态对话框.我正在尝试调整代码,以便它也可以创建无模式对话框.标准代码调用Toplevel构造函数,创建对话框,然后 self.wait_window(self)在最后执行,等待对话窗口被关闭.但我没有成功.
我天真的尝试是简单地跳过wait_window()(这是我的代码中的尝试在下面剪断).我尝试过其他一些东西,但对话框仍然是模态的,也就是说,我无法与应用程序的主窗口进行交互.是什么迫使它是模态的?通常,对话框包含小部件和几个按钮.
class Dialog(Toplevel):
def __init__(self, parent, title = None,modal=True):
Toplevel.__init__(self, parent)
self.transient(parent)
if title:
self.title(title)
self.parent = parent
self.result = None
body = Frame(self)
#register validators
self.validatePosInt = (body.register(self.OnValidatePosInt),
'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
self.initial_focus = self.body(body) #this calls the body function which is overridden, and which draws the dialog
body.grid()
self.buttonbox()
self.grab_set()
if not self.initial_focus:
self.initial_focus = self
self.protocol("WM_DELETE_WINDOW", self.cancel)
self.geometry("+%d+%d" % (parent.winfo_rootx()+50,
parent.winfo_rooty()+50))
self.initial_focus.focus_set()
if modal:
self.wait_window(self)
Run Code Online (Sandbox Code Playgroud)
删除说的行self.grab_set()."抓取"意味着抓住所有事件并将它们指向这个您不想要的窗口.
如果您仔细阅读了获得代码的网页,您会看到它提到了这条确切的行及其原因:
...接下来,构造函数创建对话框主体,然后调用grab_set以使对话框模态化