python - 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
再次隐藏,直到我再次添加内容?
示例图像
解决方案
发生的情况是,当您删除最后一个小部件时,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()
推荐阅读
- python - 用户无权担任 IAM 角色
- vue.js - 尝试将翻译键值的 json 从 laravel 刀片传递到 vue.js 时出现问题
- javascript - 如何在反应中过滤和显示数组
- javascript - 如何在排序时将变量传递给 PHP?
- neo4j - 如何将具有大量空值和列的中型 CSV 导入 Neo4j
- android - Android 无法在 API < 24 上连接到 Internet
- android - DynamicLayout 增加额外空间
- python - 获取“sqlite3.OperationalError:没有这样的列:”
- c# - 在 C# 中,如何将选定索引与组合框和文本框一起使用
- flutter - 如何在 Flutter 中将颜色作为 UI 文本的一部分?