1

我在我的代码中使用了几个 tkinter 消息框。但是我注意到showinfo我在代码中使用的消息框存在问题。ok基本上,我希望在按下消息框时调用一个函数。此外,用户可以通过关闭消息框来选择不继续。但是,看起来当我按下 x 图标关闭消息框时,该函数仍然被调用。这是一个最低限度的可重现代码来解释我的意思。

from tkinter import *
from tkinter import messagebox

root = Tk()

def func() :
    Label(root,text="This is the text").pack()

msg = messagebox.showinfo("Loaded","Your saved state has been loaded")
if msg == "ok" :
    func()

root.mainloop()

我的问题是,我应该怎么做才能在按下 x 图标时不调用该函数?

4

1 回答 1

1

有不同类型的messagebox,您在这里使用的不是您实际应该用于您的案例的那种。你想要的是一个叫做askyesno'ask' 前缀的东西,因为你的代码依赖于用户的操作。因此,您想“询问”用户,例如:

from tkinter import *
from tkinter import messagebox

root = Tk()

def func() :
    Label(root,text="This is the text").pack(oadx=10,pady=10)

msg = messagebox.askyesno("Loaded","Your saved state has been loaded")
if msg: #same as if msg == True:
    func()

root.mainloop()

在这里,askyesno像其他带有“询问”前缀的函数将返回True,或者1如果您单击“是”按钮,否则它将返回False0

也只是我现在意识到的showinfo,就像其他以“显示”为前缀的消息框函数一样,返回'ok'您按下按钮或关闭窗口。

更多带有“询问”前缀的消息框 ~ askokcancel, askquestion, askretrycancel, askyesnocancel. 看看这里

于 2020-11-11T20:55:10.917 回答