对象之间的通讯
这个想法是从Gui创建一个Toplevel窗口,并在Toplevel关闭后将数据(名称)从Toplevel Entry发送回Gui。
对象应用程序如何知道toplev对象是否被破坏?
或换句话说
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()
参考方案
在销毁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()
按下“显示名称”按钮,将名称字符串打印到控制台。
如果您需要保存多个字符串,可以将名称附加到列表中,将其保存在字典中,等等。
如果愿意,可以在销毁TopLevel窗口之前调用Gui.show_name
方法:
def get_name(self):
self.master.name_data = self.entry_name.get()
self.master.show_name()
self.toplev.destroy()
如何使用pass语句? - python我正在学习Python,并且已经到达有关pass语句的部分。我正在使用的指南将其定义为通常用作占位符的Null语句。我仍然不完全明白那是什么意思。有人可以告诉我一个简单的/基本情况,在其中使用pass语句以及为什么需要它吗? 参考方案 假设您正在使用尚未实现的某些方法设计一个新类。class MyClass(object): def meth_a(self)…
Python uuid4,如何限制唯一字符的长度 - python在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…
如何每隔n秒运行一个函数,但又不中断其他代码?也许在后台运行? - pythonPython是我的第一语言,因此如果没有意义,请理解我。我正在用python制作虚拟宠物。我将Tkinter用于GUI。我想每5秒在Action类中运行一次display方法。但是,如果我使用线程,时间表或时间并将代码放在按钮的正前方,它就会冻结并只运行显示方法。如何在不中断按钮和其他部件的情况下每5秒运行一次显示方法?class Pet: def __in…
每个文件合并后添加换行 - python我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…
Python-在PyQt5中循环创建按钮 - python我一直在尝试根据PyQt5中变量的值创建X个按钮,但是我的方法不起作用。我创建了一个带有循环的函数,其中X值为按钮的数量。此代码(功能已注释)有效:class Ui_MainWindow(object): def setupUi(self, MainWindow): def createButt…