Python 在tkinter中关闭窗口之前执行某个命令

Python 在tkinter中关闭窗口之前执行某个命令,python,tkinter,Python,Tkinter,我将tkinter与python一起使用 按下关闭按钮时,是否可以在关闭窗口之前执行特定命令(例如打印(“hello”) 我使用的是桌面环境的关闭按钮(以及最大化和最小化),而不是任何特殊的关闭按钮 请注意,我问的是如何在关闭前执行某个命令,而不是如何关闭窗口(这可以通过窗口按钮完成)。 所以这不是重复的以下是我的想法: import tkinter as tki def good_bye(*args): print('Yo, dawg!') root_win = tki.Tk()

我将tkinter与python一起使用

按下关闭按钮时,是否可以在关闭窗口之前执行特定命令(例如打印(“hello”)

我使用的是桌面环境的关闭按钮(以及最大化和最小化),而不是任何特殊的关闭按钮

请注意,我问的是如何在关闭前执行某个命令,而不是如何关闭窗口(这可以通过窗口按钮完成)。
所以这不是重复的

以下是我的想法:

import tkinter as tki

def good_bye(*args):
    print('Yo, dawg!')

root_win = tki.Tk()
my_button = tki.Button(root_win, text='I do nothing')
my_button.pack(padx=20, pady=20)
my_button.bind('<Destroy>', good_bye)
root_win.mainloop()
将tkinter作为tki导入
def再见(*args):
打印(“哟,老兄!”)
root_win=tki.Tk()
my_button=tki.button(root_win,text='I dono')
我的按钮包(padx=20,pady=20)
我的按钮。绑定('',再见)
root_win.mainloop()

该事件在小部件被销毁时触发,这发生在您关闭主窗口时。奇怪的是,如果将事件绑定到主窗口,它会被触发两次。也许有人更了解这一点。

根据您在窗口关闭时想要执行的操作,一个可能的解决方案是将GUI封装到一个类中,用
语句初始化它,然后使用
\uuuuuu()方法执行工作:

import tkinter


class MainWindow(object):

  def __init__(self):
    print("initiated ..")
    self.root = tkinter.Tk()

  def __enter__(self):
    print("entered ..")
    return self

  def __exit__(self, exc_type, exc_val, exc_tb):
    print("Main Window is closing, call any function you'd like here!")



with MainWindow() as w:
  w.root.mainloop()

print("end of script ..")

为什么我要把这个绑在按钮上?我只需要在窗口关闭时执行命令。我可以将其绑定到已有的按钮吗?您可以将其绑定到任何小部件。就像我说的,如果你把它绑定到主窗口,它会触发两次方法。FWIW
root\u win.bind(“”,再见)
对我有效,函数只调用一次。Python3.6.5在Windows7上的Python.org.32位。您不需要绑定到任何小部件。只是绑定到根窗口。我试过了,结果函数被调用了两次。你说它不是重复的,但它是重复的。尽管措辞不同(“处理”与“运行命令”),但答案是相同的,而且是使用
协议
方法。布莱恩是正确的。使用协议将“窗口关闭”事件重定向到自定义函数是最好的选择。为什么需要输入(self):呢?@archismanpanagrahi当类的实例用于(“输入”)带有
语句的
时,调用
\u输入
方法。