为了账号安全,请及时绑定邮箱和手机立即绑定

添加自定义类小部件时 PanedWindow 没有子级

添加自定义类小部件时 PanedWindow 没有子级

MM们 2023-07-27 10:06:54
这是我面临的一个非常特殊的问题,尽管这可能是因为我对 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_panelScrollableFrame. 由于您的实现ScrollableFrame不采用位置参数,因此您必须将父级指定为master关键字参数:

settings_frame = ScrollableFrame(master=main_panel)

pack您还存在一个问题,即您没有为画布、框架和滚动条调用 、place或。grid这不会影响您所询问的父/子问题,但会阻止这些小部件可见。

您也不应该将滚动条放在画布内。这将导致滚动条位于靠近右边距绘制的对象的顶部。


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信