子窗口关闭时,父窗口中的tkinter运行功能

时间:2018-08-10 18:49:57

标签: python tkinter

我在tkinter中有一个父窗口,它会像这样打开一个子窗口:

def openChild(data):
            callChildFunc(data,"y")

Button(dash, text="Open", command=partial(openChild, data))

这将调用函数callChildFunc(data,fill),该函数接受输入并将其保存到json文件中。子窗口关闭如下:

def getInput(file):
            #bunch of commands to save data from input fields...
            childform.destroy()

Button(childform, text="Save", command=partial(getInput, data))

我想在子窗口被破坏时在父窗口中调用一个函数。父窗口有什么方法可以检测到何时销毁了孩子,或者有一种方法可以将参数从被销毁的窗口传递回父窗口?

2 个答案:

答案 0 :(得分:1)

找到了一种解决方案,可以执行我想要的操作,并在子窗口销毁时执行一个函数:

child.bind("<Destroy>",parentfunction())

答案 1 :(得分:0)

您可以只使用一个全局变量,getInput可以将其保存到该变量中,然后可以访问父窗口。

如果您不介意重写代码,另一种方法是使用类来管理窗口,并以TopLevel小部件的形式打开子级,即:

import tkinter as tk

class parent(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        button1 = tk.Button(self, text="Open", command=lambda : self.openChild())
        # class variable for saving input of child
        self.data = None

    def openChild(self):
        self.child = tk.TopLevel()
        # entry box for data
        self.entry1 = tk.Entry(self.child)
        # button for saving data
        button1 = tk.Button(self.child, text='Save', command= lambda : self.getInput())

    def getInput(self):
        if self.child:
            self.data = self.entry1.get()
            self.child.destroy()

不知道这是否是最优雅的处理方式,但是使用类为tkinter提供了更多选择,值得一看。