在 canvas 上收缩一个框架,当框架的 children 被移除时

Shrink a frame on a canvas, when the children of the frame are removed

我在框架上有可滚动的小部件。该框架位于 canvas 上。它是一个控制台,清除控制台按钮调用

for i in self.CanvasFrame.winfo_children():
     i.destroy()

CanvasFrame 是 canvas 上的框架,children 已被销毁。问题是,当 children 消失时,框架的大小仍然存在,并且配置 canvas 的事件由于剩余的大小而不起作用。事件处理程序:

self.update()
self.Canvas.configure(scrollregion = self.Canvas.bbox("all"))
self.Canvas.yview_moveto(1.0)

我试过了

self.Canvas.itemconfigure(1, height = 0) #didnt work
self.Canvas.itemconfigure(1, height = 1) 

另一行给它一个固定的高度,添加新的 children 不会调整框架的大小。我该如何解决这个问题?

更新: 工作清除控制台方法:

for i in self.CanvasFrame.winfo_children():
    i.destroy()
Label(self.CanvasFrame).pack()
self.CanvasConfigureEvent()
self.CanvasFrame.winfo_children()[0].destroy()

当您从另一个小部件(例如框架)中删除所有小部件时,几何管理器将不再受控。由于没有几何管理器处于控制之中,因此永远不会指示框架调整大小。

最简单的解决方案是创建一个 1x1 框架或标签并将其打包到框架中,至少暂时如此。这将导致打包算法启动并调整父框架的大小。