我有一个 tkinter 框架,我想在 Y 轴上自动调整大小,但在向其添加标签小部件时保持恒定宽度。
为了保持我正在使用的 X 大小不变,grid_propogate(False)
但这会使整个东西保持不变的大小。
如何设置框架以这种方式调整大小?
谢谢
好的,想通了
制作了一个更大的框架,它包含了我的框架在最大化和使用时可以填充的空间pack(fill=X
),pack_propagate(False)
并使内框架符合外框架的 X 尺寸而不改变它。然后我可以根据需要向内框添加线条,并保持它的 X 大小:
OuterFrame = Frame(root, height=500, width=400)
InnerFrame = Frame(OuterFrame, borderwidth=3, relief=RAISED)
InnerFrame.pack(side=TOP, fill=X)
# stuff that goes in the y-resizing InnerFrame
OuterFrame.pack_propogate(False)
OuterFrame.pack()
这对我来说似乎是一个非常丑陋的解决方案,(希望有人会提出更好的解决方案):
import Tkinter as tk
root=tk.Tk()
f=tk.Frame(root,width=100,height=300)
f.grid_propagate(False)
f.grid(row=0,column=0)
def resize(evt):
f.update_idletasks()
height=f.winfo_reqheight()
f.grid_propagate(False)
if(evt.width!=100) or (evt.height!=height):
f.configure(width=100,height=height)
print "HERE", evt.width,height
f.bind('<Configure>',resize)
#Just some stupid (ugly) code to update the size of the widget at runtime.
def add_label():
f.grid_propagate(True)
lbl=tk.Label(f,text=' %d Hello!'%(add_label.row))
lbl.grid(column=0,row=add_label.row)
add_label.row+=1
add_label.row=0
b=tk.Button(root,text="Add label",command=add_label)
b.grid(row=1,column=0)
root.mainloop()