t通过MessageBox控制按钮功能

2024-09-29 19:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码显示了我的程序的一部分和我面临的问题。在

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和label answer01变灰(禁用)。 开始按钮只启用checkbut和answer01,然后被销毁。(目前为止还不错) 一旦输入正确,TQUEST将视为正确 其他: nxtquest.config(状态=正常) 但是当我遇到另一个问题时,nxtquest按钮已经启用,这就是问题所在!在

我怎样才能使按钮在显示警告消息框后才自动启用?在

如果你看到新手犯的错误,我可以要求一些帮助和建议吗?在


Tags: answerconfigmessageifeasycolumngridrow
1条回答
网友
1楼 · 发布于 2024-09-29 19:26:10

虽然我不知道有什么方法可以用messagebox小部件来实现这一点(尽管我确信有一个事件可以用作触发器),但是您可以通过用一个Toplevel小部件替换messagebox并在小部件上使用.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。如果我们在调用函数ButtonToplevel小部件中添加一个Button,这同样有效。在

相关问题 更多 >

    热门问题