我是一个python初学者,正在制作一个程序,该程序应该保存并呈现campingsite的预订(只是为了好玩…)。我用面向对象的方式对它进行了结构化,这意味着我为每个单独的窗口定义了一个类。我需要做的是,当另一个顶层窗口(从子窗口2创建)关闭时,更新一个显示数据库条目的顶层窗口(子窗口2)。在
import Tkinter as tk
class MenuWindow(tk.Tk):
def __init__(self, master):
self.master = master
#Widgets
def open_subwindow1(self):
self.window = Toplevel(self.master)
self.SubSubWindow1 = SubSubWindow1(self.window)
def open_subwindow2(self):
self.window = Toplevel(self.master)
self.SubSubWindow2 = SubSubWindow2(self.window)
class SubWindow1(tk.Tk):
def __init__(self, master):
self.master = master
#Widgets
class Subwindow2(tk.TopLevel):
def __init__(self, master):
self.master = master
#Widgets
self.button = tk.Button(master, text='Quit', command=open_subsub1)
def load_values(self):
#loading sqlite db-values into listboxes
def open_subsub1(self):
self.window = Toplevel(self.master)
self.SubSubWindow1 = SubSubWindow1(self.window)
class SubSubWindow1(tk.TopLevel):
def __init__(self, master):
self.master = master
#Widgets
self.button = tk.Button(master, text='Quit', command=on_quit)
def on_quit(self):
#Here I want to call a function that updates SubWindow2 (loads sqlite database values into several listboxes)
self.master.destroy()
root = tk.Tk()
myprog = MyProg(root)
root.mainloop()
如何从SubSubWindow1访问Subwindow2中的函数?self.master
只引用TopLevel()
实例对吗?在
不行,我得到一个TypeError: unbound method load_values() must be called with SubWindow2 instance as first argument (got nothing instead)
这是一个未经验证的方法来“嵌套”顶层窗口吗?还有什么选择?在
任何评论都非常感谢!谢谢你的帮助
在这篇文章的开头,我应该声明我也是一个新手,我将非常感谢其他人的建议,以免传播错误信息。在
据我所见,您对Python中继承与封装的工作方式存在一些误解。首先,在Tkinter应用程序中,应该只有一个Tk()实例。在你的类定义中,你声明。。。在
这意味着,每当您创建一个新的SubWindow1时,Tk的一个新实例将被实例化,SubWindow1将继承它的所有属性。在
如果您想创建一个引用顶级实例并具有所有属性的类,那么您的子窗口2是正确的。在
^{pr2}$但是,在init中,还必须初始化Toplevel的此实例:
每个“master”都引用它上面的元素。Tk应用程序的工作方式是树状层次结构。这就是为什么你应该只有一个Tk()的实例,它作为你的“根”。这个Tk实例中包含窗口,其中包含窗口或元素。因此,每个窗口或元素都有一个父级,称为master,这样您就可以四处导航了。在
因此,当您创建子窗口2的实例时,它引用子窗口2中的所有内容,以及顶层实例中包含的所有内容。因为“自我”现在指的是顶层,你可以把它传给孩子们成为大师,比如:
是的,但是由于您将通过SubWindow2继承继承继承所有顶层属性,所以您可以添加更多方法,并且仍然可以通过自我控制标签。在
最后,您还应该调用pack()来处理希望在窗口中正确显示的元素。在
总之,我对您的程序进行了一些编辑,以尝试演示继承的一些概念以及它在Tkinter应用程序中的工作方式。我希望你能看看这个,从中得到一些东西。请让我知道,如果有任何你不同意的元素,因为它远不是完美的。在
相关问题 更多 >
编程相关推荐