5

I have a Tkinter window whenever the minimize button is pressed I'd like to run a command, how do I do this?

I know w.protocol("WM_DELETE_WINDOW", w.command) will run a command on exit.

rectangletangle
  • 50,393
  • 94
  • 205
  • 275
  • I've been looking through the Tcl documentation for all of this and I don't think there's a way to implement this. The only protocols I saw other than WM_DELETE_WINDOW are WM_SAVE_YOURSELF which is deprecated and not what you want, and WM_TAKE_FOCUS which, according to the man pages, "is too complicated to mess with." Out of curiosity, what are you trying to do? – Rafe Kettler Oct 01 '10 at 04:44
  • I have a tool window along with my main program. When I minimize the main program I was going to make the tool window hide as well. – rectangletangle Oct 01 '10 at 07:34

1 Answers1

5

You can bind to the <Unmap> event.

For example, run the following code and then minimize the main window. The tool window should disappear when the main window is minimized.

import Tkinter as tk

class App:
    def __init__(self):
        self.root = tk.Tk()
        tk.Label(self.root, text="main window").pack()
        self.t = tk.Toplevel()
        tk.Label(self.t, text="tool window").pack()
        self.root.bind("<Unmap>", self.OnUnmap)
        self.root.bind("<Map>", self.OnMap)
        self.root.mainloop()

    def OnMap(self, event):
        # show the tool window
        self.t.wm_deiconify()

    def OnUnmap(self, event):
        # withdraw the tool window
        self.t.wm_withdraw()

if __name__ == "__main__":
    app=App()
Bryan Oakley
  • 370,779
  • 53
  • 539
  • 685