Python Tkinter messagebox的行为不像模态对话框

Python Tkinter messagebox的行为不像模态对话框,python,tkinter,messagebox,Python,Tkinter,Messagebox,我用messagebox回答一个简单的是/否问题,但这个问题不应该回避,所以我想让它不可避免,如果我有一个问题框的话 messagebox.askyesno("text", "question?") 然后我可以回到tkinter的根窗口,问题仍然在等待回答,但是如果我有 messagebox.askyesno("text", "question?") messagebox.askyesno("text", "question?") 第一个消息框打开后,我仍然可以返回tkinter的根窗口,但

我用messagebox回答一个简单的是/否问题,但这个问题不应该回避,所以我想让它不可避免,如果我有一个问题框的话

messagebox.askyesno("text", "question?")
然后我可以回到tkinter的根窗口,问题仍然在等待回答,但是如果我有

messagebox.askyesno("text", "question?")
messagebox.askyesno("text", "question?")
第一个消息框打开后,我仍然可以返回tkinter的根窗口,但另一个问题框我无法返回(就像我需要的那样)。这适用于我测试的每个messagebox。有人能告诉我为什么会这样,我如何才能避免第一个问题框,或者我只需要在实际的问题框之前做一个空白的
messagebox
。有没有什么我做错了,因为我认为留言板不应该在意之前是否有留言板


为了更好地说明我的观点,我开始编写一个简单、组织良好的示例,它非常有效。当我第一次开始使用
messagebox
时,我发现了它们之间的区别,我想测试它的功能,而不是将它放在函数中。在一个函数中,它可以完美地工作。

使用
抓取集
将焦点从根上移开,直到消息框被应答为止。或者在打开messagebox后调用
wait\u window()
。只需要一个或另一个

import tkinter as tk
from tkinter.messagebox import askyesno

def onClick():
    root.grab_set() # Prevent clicking root while messagebox is open
    ans = askyesno('Confirm', 'Press Yes / No')
    root.wait_window() # Prevent clicking root while messagebox is open
    if ans:
        print('Yes Pressed')
    else:
        print('No Pressed')

root = tk.Tk()

tk.Button(root, text='Click me', command=onClick).pack()

root.mainloop()

tkinter.messagebox.askyesno
已经生成了您想要的模式对话框。该对话框应该是模式对话框,因此查看更多代码以更好地理解上下文将非常有用。@J.F.Sebastian我知道该对话框生成了一个模型对话框,但用户仍然可以忽略该问题并返回根窗口。例如,如果您试图在windows op中保存一个文件,而您已经有一个同名文件,则会收到无法避免的错误消息(开始发出嘟嘟声并填充)。这就是我想要的。如前所述,在回答第一个messagebox之后,第二个messagebox(以及第三个、第四个等)会发生excat操作。您能否提供一个完整的最小示例来重现问题?@user1362446您应该提供您的解决方案作为答案,并在允许的情况下(几天后)接受它。