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

这是我面临的一个非常特殊的问题,尽管这可能是因为我对 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。


有人遇到过这种情况吗?提前致谢。


MM们
浏览 94回答 1
1回答

繁华开满天机

该小组报告说没有孩子,因为它没有孩子。您没有将窗格窗口作为父窗口传递,ScrollableFrame以便滚动框架成为根窗口的子窗口。如果您希望可滚动框架成为窗格窗口的子窗口,则需要将窗格窗口设为其父窗口。您需要传递main_panel到ScrollableFrame. 由于您的实现ScrollableFrame不采用位置参数,因此您必须将父级指定为master关键字参数:settings_frame = ScrollableFrame(master=main_panel)pack您还存在一个问题,即您没有为画布、框架和滚动条调用 、place或。grid这不会影响您所询问的父/子问题,但会阻止这些小部件可见。您也不应该将滚动条放在画布内。这将导致滚动条位于靠近右边距绘制的对象的顶部。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python