首页 > 解决方案 > Python Tkinter - 一段时间后或点击后销毁窗口

问题描述

我有以下代码:

import tkinter as tk
from tkinter import messagebox

try:
    w = tk.Tk()
    w.after(3000, lambda: w.destroy()) # Destroy the widget after 3 seconds
    w.withdraw()
    messagebox.showinfo('MONEY', 'MORE MONEY')
    if messagebox.OK:
        w.destroy()
    w.mainloop()
    confirmation = 'Messagebox showed'
    print(confirmation)
except Exception:
    confirmation = 'Messagebox showed'
    print(confirmation)

有没有更好的方法来做到这一点,而不使用线程和捕获异常?

标签: pythontkinterwindowmessagebox

解决方案


您使用if messagebox.OK:,但messagebox.OK被定义为OK = "ok"。因此,您的 if 语句始终为真。如果要检查用户是否点击了按钮,则需要获取showinfo函数的返回值。

所以你可以这样做:

a = messagebox.showinfo('MONEY', 'MORE MONEY')
if a:
    w.destroy()

甚至更短:

if messagebox.showinfo('MONEY', 'MORE MONEY'):
    w.destroy()

w.destroy当用户没有点击任何东西时,这种方式不会运行(所以当调用w.destroy已经运行时after)。

总共:

import tkinter as tk
from tkinter import messagebox

w = tk.Tk()
w.withdraw()
w.after(3000, w.destroy) # Destroy the widget after 3 seconds
if messagebox.showinfo('MONEY', 'MORE MONEY'):
    w.destroy()

confirmation = 'Messagebox showed'
print(confirmation)

推荐阅读