這是我面臨的一個非常特殊的問題,盡管這可能是因為我對 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
提交
取消