tkinter 消息框的问题
issue with tkinter messagebox
我在我的代码中使用了几个 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 图标时不调用该函数?
有不同类型的 messagebox
,您在此处使用的类型并不是您实际应该为您的情况使用的类型。您想要的是 askyesno
或前缀为 'ask' 的东西,因为您的代码取决于用户的操作。所以你想 '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
和其他 'ask' 前缀函数一样,如果您单击 'Yes' 按钮,将 return True
或 1
,否则它将 return False
或 0
.
也是我现在意识到的事情,showinfo
,像其他 'show' 前缀消息框功能一样,returns 'ok'
你要么按下按钮,要么关闭 window.
更多 'ask' 前缀消息框 ~ askokcancel
、askquestion
、askretrycancel
、askyesnocancel
。看看here
我在我的代码中使用了几个 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 图标时不调用该函数?
有不同类型的 messagebox
,您在此处使用的类型并不是您实际应该为您的情况使用的类型。您想要的是 askyesno
或前缀为 'ask' 的东西,因为您的代码取决于用户的操作。所以你想 '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
和其他 'ask' 前缀函数一样,如果您单击 'Yes' 按钮,将 return True
或 1
,否则它将 return False
或 0
.
也是我现在意识到的事情,showinfo
,像其他 'show' 前缀消息框功能一样,returns 'ok'
你要么按下按钮,要么关闭 window.
更多 'ask' 前缀消息框 ~ askokcancel
、askquestion
、askretrycancel
、askyesnocancel
。看看here