首页 > 解决方案 > 如何防止小部件缩小到其内容的大小?

问题描述

在我正在编写的代码中,我创建了一些框架并将它们放置在示例中。层次框架的宽度设置为 260。当我放入宽度小于框架宽度的标签时,框架的宽度减小到标签的宽度。

代码如下:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Application")
root.geometry("1200x1000")

s=ttk.Style()
s.configure('TFrame', background='gray')
s.configure('windowframes.TFrame', background='darkgray')

mainframe = ttk.Frame(root, padding="2 2 2 2",height=300)
mainframe.grid(column=0, row=0, sticky=(N,E,S,W))

toolframe = ttk.Frame(mainframe,height=60,style='windowframes.TFrame')
toolframe.grid(column=0, row=0, columnspan=2,sticky=(N,S,E,W), padx=2, pady=2)

hierarchyframe = ttk.Frame(mainframe,width=260,style='windowframes.TFrame')
hierarchyframe.grid(column=0, row=1, rowspan=2, sticky=(N,S,E,W), padx=2, pady=2)
label = Label(hierarchyframe,text="sample")
label.grid(column=0, row=0)

graphicframe = ttk.Frame(mainframe,style='windowframes.TFrame')
graphicframe.grid(column=1, row=1, sticky=(N,S,E,W), padx=2, pady=2)

fileframe = ttk.Frame(mainframe,height=360,style='windowframes.TFrame')
fileframe.grid(column=1, row=2, sticky=(N,S,E,W), padx=2, pady=2)

mainframe.columnconfigure(1,weight=1)
mainframe.rowconfigure(1,weight=1)

root.columnconfigure(0,weight=1)
root.rowconfigure(0,weight=1)

root.mainloop()

样式在那里,因此您可以看到框架的轮廓。

标签: pythonpython-3.xtkinter

解决方案


您可以修复您需要告诉它Frame不要传播它的尺寸,这意味着不要调整自身以适应其内容。grid_propagate()您可以使用如下所示的方法来防止它发生:

...
toolframe = ttk.Frame(mainframe,height=60,style='windowframes.TFrame')
toolframe.grid(column=0, row=0, columnspan=2,sticky=(N,S,E,W), padx=2, pady=2)
hierarchyframe = ttk.Frame(mainframe,width=260,style='windowframes.TFrame')
hierarchyframe.grid(column=0, row=1, rowspan=2, sticky=(N,S,E,W), padx=2, pady=2)
hierarchyframe.grid_propagate(False)  # <=== ADDED ====
label = Label(hierarchyframe,text="sample")
...

这是显示结果的屏幕截图:

截屏

另一种替代方法是使用以像素为单位设置列的最小大小,如下所示,这不会阻止它变宽:

hierarchyframe.columnconfigure(0, minsize=260)

推荐阅读