我在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))
我想在子窗口被破坏时在父窗口中调用一个函数。父窗口有什么方法可以检测到何时销毁了孩子,或者有一种方法可以将参数从被销毁的窗口传递回父窗口?
答案 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提供了更多选择,值得一看。