python - 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)
有没有更好的方法来做到这一点,而不使用线程和捕获异常?
解决方案
您使用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)
推荐阅读
- react-native - React Native (Expo) Asyncstorage 在应用程序的 Google Play 版本上不起作用
- javascript - Google Adsense 错误 -adsbygoogle.push() 错误:每页仅支持一个 AdSense 头部标签。第二个标签被忽略
- arrays - 如何按值处理 2 个不同长度的数组?
- mysql - 如何从多个表中找出不匹配 SQL 中特定条件的结果?
- blazor - 为什么我的 Blazor 日期输入类型无法正常工作?
- python - 有没有一种方法可以创建可供 .NET 和 Python 使用的库?
- python - 我是 python 新手,我偶然发现了一个函数/变量?我不知道它是做什么的,有人可以解释一下吗?
- python - 如何在模板的类中显示函数的循环?
- reporting-services - 如何查找 SSRS 报告的最后部署日期
- c# - WPF Datagrid:根据单元格值为整行或行中的第一个单元格着色