【问题标题】:Reaching the parent's parent in Tkinter在 Tkinter 中联系父母的父母
【发布时间】:2022-07-21 20:56:21
【问题描述】:

假设我有一个具有以下布局的 tkinter 应用程序。

我使用了一个面向对象的层次模型,这样类的实例化如下:

MainWindow
├── OptionsFrame
│   ├── DataFrame
│   ├── MetaFrame
│   └── SaveFrame
└── PlotFrame

我希望能够使用 SaveFrame 中的绘图按钮来运行一个函数,该函数将使用 FigureCanvasTkAgg 画布对象进行绘图。

我正在努力了解如何从 SaveFrame 中到达 PlotFrame。

到目前为止,我一直在我的类声明中使用main 参数,即

class SaveFrame(ttk.Frame):
    def __init__(self, main, *args, **kwargs):
        super().__init__(main, *args, **kwargs)
        self.main = main

这将允许我将层次结构上一层到 OptionsFrame,但我需要做的是从

SaveFrame -> OptionsFrame -> MainWindow -> PlotFrame

我真的不知道这怎么可能。

谢谢

【问题讨论】:

  • 所以你实际上已经准确地描述了你需要做什么。确保每个类都有一个main 属性(它声明了小部件的父级),您可以通过这些属性找到MainWindow。到达父级后,您应该能够通过可能在其中声明的实例来调整PlotFrame
  • 标准小部件将父级作为第一个参数,并将其保存在self.master - 所以你不需要self.main。使用self.master,你可以访问parent,使用self.master.master可以访问grandparent——这可以是MainWindow,它可以访问PlotFrame
  • 您还应该查看绑定按钮的点击次数
  • 另一种方法是将PlotFrame (self.plot_frame) 作为参数发送给SaveFrame,它可以直接访问PlotFrame

标签: python tkinter


【解决方案1】:

标准小部件将 parent 作为第一个参数并将其保存在 self.master - 你不需要 self.main

使用self.master 可以访问父级,使用self.master.master 可以访问grandparent 等 - 而这个grandparent 可以是你的MainWindow

如果MainWindow 保持PlotFrame 不变,即self.plot_frame,那么SaveFrame 可能需要

self.master.master.plot_frame

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多