【问题标题】:Python Tkinter - destroy window after time or on clickPython Tkinter - 一段时间后或点击后销毁窗口
【发布时间】:2018-08-02 07:13:01
【问题描述】:

我有以下代码:

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)

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

【问题讨论】:

  • 我认为这个问题最好在Code Review 中提出。
  • @figbeam 不,这是一个 MCVE。这些在 Code Review 中是题外话。请看看他们的help center
  • 你想完成什么?您需要以这种方式销毁窗口的实际用例是什么?如果没有异常捕获,您将无法以良好的方式执行此操作。如果它可以扔,你需要能够抓住它。至少,你应该。否则你的用户会不高兴。
  • 我尝试获取一个消息框窗口,当用户单击“确定”按钮时,它可以在时间 't' 后关闭,或者更快地关闭。

标签: python tkinter window messagebox


【解决方案1】:

您使用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)

【讨论】:

  • 正是我需要的!
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2017-07-14
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
相关资源
最近更新 更多