Python 无模式对话框

Python 无模式对话框,python,tkinter,dialog,non-modal,Python,Tkinter,Dialog,Non Modal,我正在使用一个名为customDialog的类,基于 标准代码创建了一个子类Toplevel,并创建了模态对话框的类。 我正在尝试修改代码,以便它也可以创建无模式对话框。标准代码调用Toplevel构造函数,创建对话框,然后在最后执行self.wait\u window(self),等待对话框窗口关闭。 但我没有成功 我天真的尝试是跳过等待窗口()(这就是我在下面截取的代码中的尝试)。我尝试了其他一些方法,但是对话框仍然是模态的,也就是说,我无法与应用程序的主窗口交互。是什么迫使它成为模态的?对

我正在使用一个名为customDialog的类,基于 标准代码创建了一个子类
Toplevel
,并创建了模态对话框的类。 我正在尝试修改代码,以便它也可以创建无模式对话框。标准代码调用
Toplevel
构造函数,创建对话框,然后在最后执行
self.wait\u window(self)
,等待对话框窗口关闭。 但我没有成功

我天真的尝试是跳过
等待窗口()
(这就是我在下面截取的代码中的尝试)。我尝试了其他一些方法,但是对话框仍然是模态的,也就是说,我无法与应用程序的主窗口交互。是什么迫使它成为模态的?对话框通常包含小部件和几个按钮

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)

删除写有
self.grab\u set()
的行。“抓取”意味着抓取所有事件并将它们指向此窗口,这是您不想要的

如果您深入阅读获得代码的网页,您会发现它提到了这一行,以及它出现的原因:

。。。接下来,构造函数创建对话框主体,然后调用 抓取设置以使对话框成为模态


非常感谢你的回答。如果是你提到的评论,我一定读了好几遍,不明白它的意义。