首页 > 解决方案 > tkinter - 调整空框架的大小

问题描述

你如何强制框架获得window_height 0?

我的问题发生的一般情况:

import Tkinter as Tk

class App(Tk.Frame):
    def __init__(self, master):
        Tk.Frame(self, master)
        self.place_holder = Tk.Frame(master=self)
        self.content = Tk.Frame(master=self)

        self.place_holder.pack()
        self.content.pack(side=Tk.RIGHT)

        Tk.Button(master=self,command=self.add_something).pack(side=Tk.TOP)
        self.to_destroy = []

    def add_something(self):
        foo = Tk.button(master=self.place_holder, command=self.destroy_last)
        self.too_destroy.append(foo)

    def destroy_last(self):
        self.to_destroy[-1].destroy()

问题:

当我向 中添加更多元素时place_holder,它会很好地重新缩放。

当我从 中删除元素时place_holder,它会很好地重新缩放。 除非我删除最后一个元素。

在我添加任何内容之前,即使我添加了place_holder.pack(),它也不会显示。但是在删除最后一个元素后,place_holder 将保持最后一个元素的大小。有没有办法place_holder再次隐藏,直到我再次添加内容?

示例图像

左下角的空占位符 左下角的空容器不包含任何元素,但仍然有最后一个元素的大小,我怎样才能让它消失而不删除它(我希望它再次在同一个地方)?

标签: pythonpython-2.7tkinter

解决方案


发生的情况是,当您删除最后一个小部件时,pack不再管理框架,因此它不负责设置框架大小。

最简单的解决方案是临时打包一个 1x1 像素帧,这将导致占位符帧缩小。

没有办法制作零像素的帧,因此此方法将始终为占位符生成一个像素高/宽的区域。如果您不想要那个像素,您可以pack_forget在占位符上安装 call 以将其从显示器中完全删除,然后pack在您将某些内容放入其中时使用合适的选项重新添加它。

例子:

def destroy_last(self):
    self.to_destroy.pop().destroy()
    if len(self.to_destroy) == 0:
        tmp = Tk.Frame(self.place_holder, width=1, height=1, borderwidth=0)
        tmp.pack()
        self.place_holder.update()
        tmp.destroy()

推荐阅读