发生我的问题的一般情况:
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
,直到我再次添加内容?
左下角的空容器不包含任何元素,但仍然具有最后一个元素的大小,我如何才能在不将其删除的情况下使其消失(我希望再次在同一位置)?
答案 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()