【发布时间】: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