【发布时间】:2023-02-23 05:39:21
【问题描述】:
我有一个包含按钮的框架,它被打包在一个带有网格几何管理器的 LabelFrame 中。
当我用 grid_forget 删除这个框架时,LabelFrame 仍然具有相同的大小。
换句话说
它不会缩小。
这是代码,当您按下按钮时,所有按钮都将被删除
但大小仍然存在。
我希望网格几何管理器在删除小部件时自动处理调整大小。
import tkinter as tk
class Collapsible():
def __init__(self, master):
self.master = master
self.dynamic_widgets()
self.fill_lb()
def dynamic_widgets(self):
"""create widgets"""
#frame that holds labelwidgets
self.fr_collapse = tk.Frame(self.master, bg="orange")
#title for label frame----------------------------------------------------------------
self.bt_title = tk.Button(self.fr_collapse, text="o",
highlightthickness = 0, bd = 0,
relief="flat", bg="orange", fg="red")
self.bt_title.grid(row=0, column=0)
self.label_title = tk.Label(self.fr_collapse, text="Name", bg="orange")
self.label_title.grid(row=0, column=1)
#-------------------------------------------------------------------------------------
self.label_frame = tk.LabelFrame(self.master,
bg="orange", labelwidget=self.fr_collapse)
self.label_frame.grid(sticky="wesn", ipady=(10))
#frame for buttons
self.frame_forget = tk.Frame(self.label_frame, bg="orange")
self.frame_forget.grid()
#set command
self.bt_title.configure(command=lambda x=self.frame_forget, y=self.bt_title: self.hide(x, y))
def fill_lb(self):
"fill label frame with dumb buttons"""
b = tk.Button(self.frame_forget, text="Example button 1", bg="orange", relief="flat")
b.grid()
b2 = tk.Button(self.frame_forget, text="Example button 2", bg="orange", relief="flat")
b2.grid()
def hide(self, frame, button):
"""switch value: hide frame based on text configuration"""
bt_text = button.configure("text")
if bt_text[-1] == "o":
frame.grid_remove()
button.configure(text="-")
else:
frame.grid()
button.configure(text="o")
if __name__ == "__main__":
root = tk.Tk()
col = Collapsible(root)
root.configure(bg="orange")
root.mainloop()
- 到目前为止我尝试了什么:
- 我想也许我需要在删除按钮后将其网格化。行不通,因为这会 再次将我的隐藏按钮网格化,这在逻辑上是合乎逻辑的。
- 我想也许我需要再次对 LableFrame 进行网格化。尺寸也没有变化
- 我认为也许我应该放置一个像占位符一样具有最小宽度和高度值的哑框。 并将它作为我的 frame_forget 框架中的孩子网格化,希望它会缩小。但还是一无所获。
这些想法都没有给我带来解决方案,问题仍然存在
【问题讨论】:
-
如何重现运行您问题中的代码的问题?
-
当。。。的时候最后一项删除容器的大小,容器将不会调整其大小。可以在
self.frame_forget前加一个高度为1的Frame。