[英]Communication between python objects?
The idea is create a Toplevel window from Gui and after Toplevel closed send the data (name) from Toplevel Entry back to Gui 这个想法是从Gui创建一个Toplevel窗口,并在Toplevel关闭后将数据(名称)从Toplevel Entry发送回Gui。
How object app can know whether the toplev object was destroyed? 对象应用程序如何知道toplev对象是否被破坏?
or with other words 或换句话说
How can object of Gui know that the object of My_Toplevel is closed? Gui的对象如何知道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.name = None
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.name = 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()
def get_toplevel(self):
self.my_top = My_Toplevel(self)
if __name__ == "__main__":
root = Tk()
root.title("Parent")
app = Gui(root)
root.mainloop()
You need to pass the data to the Gui
instance before you destroy My_Toplevel
. 在销毁My_Toplevel
之前,需要将数据传递到Gui
实例。 One way to do that is to save the name string as an attribute of the Gui
instance since you pass that the master
parameter when you call My_Toplevel
. 一种方法是将名称字符串保存为Gui
实例的属性,因为在调用My_Toplevel
时传递了master
参数。 For example: 例如:
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()
Press the "show name" button to print the name string to the console. 按下“显示名称”按钮,将名称字符串打印到控制台。
If you need to save more than a single string, you could append the name to a list, save it in a dictionary, etc. 如果您需要保存多个字符串,可以将名称附加到列表中,将其保存在字典中,等等。
If you like, you can call the Gui.show_name
method just before the TopLevel window is destroyed: 如果愿意,可以在Gui.show_name
TopLevel窗口之前调用Gui.show_name
方法:
def get_name(self):
self.master.name_data = self.entry_name.get()
self.master.show_name()
self.toplev.destroy()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.