这是我面临的一个非常特殊的问题,尽管这可能是因为我对 TKinter 的内部运作缺乏了解。我正在尝试创建一个名为 ScrollableFrame 的类,它继承自 Frame 并将其添加到 PanedWindow 小部件中。假设我添加一个普通框架:main_panel = PanedWindow()main_panel.pack()settings_frame = Frame()main_panel.add(settings_frame)该代码有效,当我调用时main_panel.children我可以看到框架。当我使用 ScrollableFrame 时,如下所示:class ScrollableFrame(Frame): def __init__(self, **kw): try: super().__init__(**kw) self._canvas = Canvas(self) self._frame = Frame(self._canvas) self._scrollbar = Scrollbar(self._canvas, orient=VERTICAL, command=self._canvas.yview) self._canvas.configure(yscrollcommand=self._scrollbar.set) except Exception as e: print(e)main_panel = PanedWindow()main_panel.pack()settings_frame = ScrollableFrame()main_panel.add(settings_frame)当我调用时, main_panel 报告根本没有子项main_panel.children。有人遇到过这种情况吗?提前致谢。
1 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
该小组报告说没有孩子,因为它没有孩子。您没有将窗格窗口作为父窗口传递,ScrollableFrame
以便滚动框架成为根窗口的子窗口。
如果您希望可滚动框架成为窗格窗口的子窗口,则需要将窗格窗口设为其父窗口。您需要传递main_panel
到ScrollableFrame
. 由于您的实现ScrollableFrame
不采用位置参数,因此您必须将父级指定为master
关键字参数:
settings_frame = ScrollableFrame(master=main_panel)
pack
您还存在一个问题,即您没有为画布、框架和滚动条调用 、place
或。grid
这不会影响您所询问的父/子问题,但会阻止这些小部件可见。
您也不应该将滚动条放在画布内。这将导致滚动条位于靠近右边距绘制的对象的顶部。
添加回答
举报
0/150
提交
取消