【问题标题】:How do I display a message before closing the tkinter window?如何在关闭 tkinter 窗口之前显示一条消息?
【发布时间】:2021-07-02 02:54:00
【问题描述】:

在单击添加到窗口的关闭按钮时,需要在关闭 tkinter 窗口之前显示一条消息。

lab = Label(window,text = 'thank you')
lab.grid()
window.destroy()

我使用上面的代码来执行此操作,但是在显示消息之前窗口已关闭 我可以解决这个问题吗?

【问题讨论】:

  • 使用.protocol('WM_DELETE_WINDOW', your_func)

标签: python-3.x user-interface tkinter


【解决方案1】:

你可以使用这个:

from tkinter import Tk
import tkinter.messagebox as msgbox


def display_msg():
    msgbox.showinfo(title='', message='Thank You')
    root.destroy()


root = Tk()

root.protocol('WM_DELETE_WINDOW', display_msg)

root.mainloop()

它会在关闭前向您显示一个消息框, 或者如果您想显示一个小部件,请使用:

from tkinter import Tk, Label


def display_msg():
    msg = Label(root, text='Thank You!')
    msg.pack()
    root.after(3000, root.quit)


root = Tk()

root.protocol('WM_DELETE_WINDOW', display_msg)

root.mainloop()

当你使用 'WM_DELETE_WINDOM' 协议 root 时,你可以让它在你尝试关闭窗口时执行一个函数。

在第一个示例中,它只会显示一个信息框。

在第二个示例中,它将等待 3 秒(3000 毫秒)然后销毁根

【讨论】:

  • 谢谢!这就是我要找的。​​span>
  • @sathvika 我也更新了答案,因为我最近了解到使用 .update() 并不是那么好,所以我稍微更改了代码以使 after() 成为可能,这也使它成为可能更紧凑一点,所以检查更新的代码(第二个例子)
  • 我能否对以下问题进行一些澄清 1. root.quit 函数有什么作用? 2. 协议函数在这里做什么?
  • @sathvika 1. 据我了解,它退出了mainloop() 进程,因此基本上关闭了所有内容。 2.据我所知:它基本上告诉了在该协议变为真的情况下该怎么做,所以在这种情况下,协议是'WM_DELETE_WINDOW',这是非常不言自明的(但它是当(我认为)按下屏幕右上角的X),所以这个协议在关闭窗口时会变成真的,因此会执行给定的函数
  • @sathvika here 可能是对协议更好更深入的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 2017-12-06
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多