MessageBox的Tkinter按钮功能控制

时间:2017-10-23 14:14:34

标签: python function button tkinter tk

下面的代码显示了我的计划的一部分以及即将面临的问题。

def checkAnswer():
mainAnswer = answer01.get()
if len(mainAnswer) == 0:
    messagebox.showwarning(message='Please answer the question!')
    return
if int(mainAnswer) != answer:
    messagebox.showwarning(message='Incorrect! The correct answer is: ' + str(answer))
else:
    nxtquest.config(state=NORMAL)
    messagebox.showinfo(message='Correct! :)')question01 = Label(easy)
question01.grid(row=2, column=0)
answer01 = Entry(easy)
answer01.grid(row=3, column=2)
answer01.bind('<Return>', func=lambda e:checkAnswer())
start = Button(easy, text = "Start!", command=ask, bg='green', fg='white')
start.grid(row=3, column=3) 
nxtquest = Button(easy, text='Next Question', command=ask)
nxtquest.grid(row=5, column=2)
checkbut = Button(easy, text='Check', command=checkAnswer)
checkbut.grid(row=4, column=2)
#check button and answer01 enabled after start pressed
launch = 1 
if launch == 1:
    answer01.config(state=DISABLED)
    checkbut.config(state=DISABLED)
    nxtquest.config(state=DISABLED)

我在这里挣扎的问题是每当我运行程序时一切都很好。显示窗口时,checkbut,nxtquest和标签answer01显示为灰色(禁用)。 启动按钮仅启用checkbut和answer01,然后销毁。 (到现在为止还挺好) 因此,一旦输入正确,nxtquest将启用,如下所示     其他:     nxtquest.config(状态= NORMAL) 但当我遇到另一个问题时,nxtquest按钮已经启用,这就是问题!

我怎样才能使按钮只在显示警告信息框后启用?

如果你看到任何新手的错误,我可以请求一些帮助以及可能的建议吗?

1 个答案:

答案 0 :(得分:1)

虽然我不知道你有什么方法可以使用messagebox小部件(尽管我确定有一个事件你可以用作触发器),但你肯定可以通过替换{ {1}}使用messagebox窗口小部件并在窗口小部件上使用Toplevel

这意味着每当.protocol("WM_DELETE_WINDOW", callback())窗口小部件被“关闭”时,我们实际上将覆盖事件被引发时所采取的操作,并将手动处理窗口小部件的关闭以及我们想要的任何其他内容做。

这看起来如下所示:

Toplevel

如果您关闭from tkinter import * root = Tk() button = Button(root, text="Ok", state="disabled") button.pack() top = Toplevel(root) def close(): top.destroy() button.configure(state="active") top.protocol("WM_DELETE_WINDOW", close) root.mainloop() 窗口小部件,您会看到该按钮现在是Toplevel。如果我们将active添加到调用函数Button的{​​{1}}小部件,这同样有效。