6

我将消息框用于一个简单的是/否问题,但不应回避这个问题,所以我想让它不可避免,而且似乎我有一个问题框。

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

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

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

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

为了更好地说明我的观点,我开始整理一个简单且组织良好的示例,并且效果很好。我弄清楚有什么区别,当我messagebox第一次开始使用时,我想测试它的能力,并没有把它放在一个函数中。在一个函数中它完美地工作。

4

1 回答 1

1

用于grab_set在消息框被回答之前保持焦点离开根目录。或者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()
于 2015-11-27T17:19:11.143 回答