繁体   English   中英

Tkinter消息框的行为不像模态对话框

[英]Tkinter messagebox not behaving like a modal dialog

我正在使用messagebox来解决一个简单的是/否问题,但是这个问题不应该被避免,所以我想让它不可避免,似乎我有一个问题框。

messagebox.askyesno("text", "question?")

然后我可以回到tkinter的根窗口,问题仍然是等待响应,但如果我有

messagebox.askyesno("text", "question?")
messagebox.askyesno("text", "question?")

打开第一个消息框后,我仍然可以回到tkinter的根窗口,但是我无法使用其他问题框(就像我需要的那样)。 这适用于我测试的每个消息框。 任何人都可以解释我为什么会这样,我怎么能让第一个问题框不可避免,或者我只需要在我的实际问题框之前做一个空白的messagebox框。 有什么我做错了,因为我认为消息框不应该关心它之前是否有消息框。

为了更好地说明我的观点,我开始组织一个简单的组织良好的例子,它完美地运作。 我想出了差异是什么,因为我第一次开始使用messagebox ,我想测试它的功能,并没有把它放在一个函数中。 在一个功能中,它完美地运作。

使用grab_set将焦点保持在root状态,直到消息框得到应答。 或者在打开消息框后调用wait_window() 只需要1或者其他

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM