pysunred 发表于 2023-3-17 15:59:47

关于类继承的问题

我在网上学习了一个tkinter模块弹出窗口及传值回到主窗口的代码
但是感觉看不懂,弹窗是如何继承主窗的?????
是把弹窗装入的主窗中吗?


# 主窗
class MyApp(tk.Tk):
def __init__(self):
    super().__init__()
............
# 第三行
    row3 = tk.Frame(self)
    row3.pack(fill="x")
    tk.Button(row3, text="设置", command=self.setup_config).pack(side=tk.RIGHT)

# 设置参数
def setup_config(self):
    pw = PopupDialog(self)
    self.wait_window(pw)
    return


# 弹窗
class PopupDialog(tk.Toplevel):
def __init__(self, parent):
    super().__init__()
    self.title('设置用户信息')
    self.parent = parent# 显式地保留父窗口

isdkz 发表于 2023-3-17 16:04:03

在这段代码中,弹窗并没有直接继承主窗口,而是通过创建一个继承自tk.Toplevel的PopupDialog类来实现的。tk.Toplevel是Tkinter中表示新窗口的类,它与tk.Tk类似,但不是应用程序的主窗口。

当你在主窗口类MyApp中调用setup_config方法时,它会创建一个PopupDialog的实例,传递当前主窗口self作为参数。这样,弹窗实例就有了一个对主窗口的引用。这个引用在弹窗的__init__方法中通过self.parent = parent语句保存。

弹窗并没有被“装入”主窗口,而是作为一个单独的窗口显示在屏幕上。它与主窗口保持关联,是因为在创建弹窗时将主窗口实例作为参数传递。这使得弹窗可以访问主窗口的属性和方法,从而实现与主窗口的交互。

另外,当弹窗被创建后,self.wait_window(pw)会暂停主窗口的运行,直到弹窗被关闭。这使得你可以在弹窗中设置一些参数,然后在弹窗关闭后,再继续主窗口的操作。

pysunred 发表于 2023-3-17 17:05:41

isdkz 发表于 2023-3-17 16:04
在这段代码中,弹窗并没有直接继承主窗口,而是通过创建一个继承自tk.Toplevel的PopupDialog类来实现的。tk ...

学习了,感谢解答
页: [1]
查看完整版本: 关于类继承的问题