这是我第一次使用 OOP,我想让 SubWindow 类继承 MainWindow 类的所有属性,但是self.root
应该tk.Toplevel()
这样做tk.Tk()
:
import tkinter as tk
class MainWindow:
def __init__(self, size, title):
self.root = tk.Tk()
self.root.geometry(size)
self.root.title(title)
def packAll(self):
for widget in self.root.children:
self.root.children[widget].pack()
class SubWindow(MainWindow):
def __init__(self, size, title):
super().__init__(size, title)
如果我将其放在self.root = tk.Toplevel()
后面super().__init__(size, title)
,它仍然会创建另一个 tkinter 实例。私有变量也不起作用。我在网上找不到解决方案。我该如何解决这个问题?
您可以做的是将所需的值传递
self.root
给基类构造函数,并使用基类选择的默认值tk.Tk()
:这样,只有一个
root
被实例化,发生在geometry()
和title()
被调用之前。if
但实际上,当您只需要传递正确的值时,您不需要使用语句:您可以使用私有类变量:
type(self)
访问类而不是实例,否则self._root()
被视为绑定方法调用,并self
传递给_root()
。