tkinter-调整空框架的大小

时间:2019-03-18 11:07:29

标签: python python-2.7 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中删除元素时,它的缩放比例很好。 EXCEPT (当我删除最后一个元素时)。

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

示例图片

empty place_holder at bottom left 左下角的空容器不包含任何元素,但仍然具有最后一个元素的大小,我如何才能在不将其删除的情况下使其消失(我希望再次在同一位置)?

1 个答案:

答案 0 :(得分:2)

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

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

无法制作零像素的帧,因此此方法将始终为占位符提供一个高/宽像素的区域。如果您不希望一个像素,可以在占位符上安装呼叫pack_forget,以将其从显示屏上完全删除,然后在放置某些东西时使用带有适当选项的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()