Tkinter Frame调整一个轴的大小

时间:2012-07-12 19:52:40

标签: python resize tkinter

我有一个tkinter框架,我想在Y轴上自动调整大小,但在我添加标签小部件时保持恒定宽度。

为了保持X大小不变,我使用的是grid_propogate(False),但这样可以保持整个大小不变。

如何设置框架以这种方式调整大小?

由于

2 个答案:

答案 0 :(得分:2)

好的,想通了

制作一个更大的框架,包含我的框架可以填充的空间,如果最大化并使用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()

答案 1 :(得分:0)

对我来说,这似乎是一个非常难看的解决方案,(希望有人会有更好的东西):

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()