鱼C论坛

 找回密码
 立即注册
查看: 1906|回复: 2

[已解决]关于类继承的问题

[复制链接]
发表于 2023-3-17 15:59:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在网上学习了一个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  # 显式地保留父窗口
最佳答案
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)会暂停主窗口的运行,直到弹窗被关闭。这使得你可以在弹窗中设置一些参数,然后在弹窗关闭后,再继续主窗口的操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)会暂停主窗口的运行,直到弹窗被关闭。这使得你可以在弹窗中设置一些参数,然后在弹窗关闭后,再继续主窗口的操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

学习了,感谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 04:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表