在tkinter中关闭消息框后按下按钮

2 投票
1 回答
2083 浏览
提问于 2025-04-18 13:07

在绑定到按钮 DROP 的功能中,我有:

def on_click_button_drop(element):

    # ...

    if not db_name:
        print("db name empty")
        messagebox.showinfo("", "db name empty")
        return
# ...
button_drop.bind("<Button-1>", on_click_button_drop)

但是在按下 messagebox.showinfo 中的 OK 之后,按钮仍然保持按下的状态...

图片 1 图片 2


完整的测试代码

from tkinter import *
import tkinter.messagebox as messagebox

root = Tk()
root.grid()


def on_click_button_drop(element):
    db_name = entry_db_name.get()
    if not db_name:
        # print("db name empty")
        messagebox.showinfo("", "db name empty")
        return
    pass

label_db_name = Label(root, text="db name")
entry_db_name = Entry(root, width=20)
button_drop = Button(root, text="DROP", width=10)

label_db_name.pack()
entry_db_name.pack()
button_drop.pack()

button_drop.bind("<Button-1>", on_click_button_drop)

root.mainloop()

要怎么做才能让按钮恢复到未按下的状态呢?

1 个回答

4

为了达到你想要的效果,使用 <ButtonRelease-1> 事件,而不是 <Button-1> 事件:

button_drop.bind("<ButtonRelease-1>", on_click_button_drop)

另外,你的 returnpass 语句是多余的,这样就够了:

def on_click_button_drop(element):
    db_name = entry_db_name.get()
    if not db_name:
        # print("db name empty")
        messagebox.showinfo("", "db name empty")

撰写回答