Вам нужно передать данные в экземпляр Gui
, прежде чем уничтожить My_Toplevel
.Один из способов сделать это - сохранить строку имени в качестве атрибута экземпляра Gui
, поскольку вы передаете этот параметр master
при вызове My_Toplevel
.Например:
from tkinter import *
font1 = font=("Open Sans Standard",16,"bold")
class My_Toplevel():
def __init__(self, master=None):
self.master = master
self.toplev = Toplevel(master)
self.create_widgets()
def create_widgets(self):
self.entry_name = Entry(self.toplev, font=font1)
self.button_ok = Button(self.toplev, text="Ok", font=font1,
command=self.get_name)
self.entry_name.pack()
self.button_ok.pack()
def get_name(self):
self.master.name_data = self.entry_name.get()
self.toplev.destroy()
class Gui(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.pack()
self.master = master
self.label_text = Label(self, text="Foo Bar Window", font=font1)
self.label_text.pack()
self.button_toplevel = Button(self, text="Create Toplevel",
command=self.get_toplevel, font=font1)
self.button_toplevel.pack()
self.name_data = None
Button(self, text="show name", command=self.show_name).pack()
def show_name(self):
print("Name =", self.name_data)
def get_toplevel(self):
self.my_top = My_Toplevel(self)
if __name__ == "__main__":
root = Tk()
root.title("Parent")
app = Gui(root)
root.mainloop()
Нажмите кнопку «Показать имя», чтобы напечатать строку имени на консоли.
Если вам нужно сохранить более одной строки, вы можете добавить имяв список, сохраните его в словаре и т. д.
Если хотите, вы можете вызвать метод Gui.show_name
непосредственно перед уничтожением окна TopLevel:
def get_name(self):
self.master.name_data = self.entry_name.get()
self.master.show_name()
self.toplev.destroy()