【问题标题】:Task after closing the tkinter window关闭 tkinter 窗口后的任务
【发布时间】:2021-07-24 06:30:06
【问题描述】:

tkinter 窗口关闭后,我的程序必须执行一些任务。

当'X'按钮被按下时,它应该打印“窗口已关闭,怎么办”???

我的代码是

from tkinter import *
root = Tk()
Label(root, text = "This is for stackoverflow('X' button clicked code)").pack()
root.mainloop()

其实我在找类似返回值的东西……

【问题讨论】:

  • @bryan Oakley 谢谢……它成功了……

标签: python user-interface tkinter close-button


【解决方案1】:

您可以使用WM_DELETE_WINDOW协议来检测根窗口是否关闭。

root.protocol("WM_DELETE_WINDOW", lambda: print ("The window is closed."))

另外,mainloop() 是一种保持 GUI 运行的 while 循环。

你也可以在后面加上print('The window is closed.')

root.mainloop()
print('The window is closed.')

【讨论】:

  • 在我的程序中,根名称是 login_root,但它不打印它给出以下错误的语句
  • 回溯(最近一次调用最后):文件“C:\Users\admin\PycharmProjects\firstfrog\CodingBee\complete_app.py”,第 2505 行,在 login_root.protocol("WM_DELETE_WINDOW" , lambda: print("窗口已关闭。")) 文件 "C:\python 32 bit\lib\tkinter_init_.py",第 2189 行,在 wm_protocol return self.tk.call( _tkinter.TclError:无法调用“wm”命令:应用程序已被销毁
【解决方案2】:

尝试在mainloop() 结束后打印语句。看看@BryanOakley 的评论 -

root.mainloop()
print("The window is closed")

直到关闭窗口或主循环结束时打印语句才会运行

编辑 - 也许这样的事情会起作用 -

import tkinter as tk

root = tk.Tk()

l = tk.Label(root,text='hiiii')
l.pack()

root.mainloop()

print('The application is closed, new window opening')


win = tk.Tk()

l = tk.Label(win,text='byeee')
l.pack()

win.mainloop()

【讨论】:

  • 它可以工作,但是如果我想在那之后开始一个新进程,它就不起作用了
  • 为您编辑了代码。我不知道这是否符合新流程
  • 感谢@PCM 试图帮助我......但我的mainloop 语句位于函数内部,但这不起作用......但感谢你试图帮助我。 .....
猜你喜欢
  • 2017-09-04
  • 2019-06-30
  • 1970-01-01
  • 2023-02-26
  • 2012-06-16
  • 2023-02-17
  • 2015-05-24
  • 2023-01-12
  • 2010-09-11
相关资源
最近更新 更多