2010-12-09 188 views
15

的Tkinter的窗口大小可以通过下面的方法来控制:如何设置框架的最小和最大高度或宽度?

.minsize() 
.maxsize() 
.resizable() 

是否有控制TKinter或者TTK帧的大小等同的方法呢?

@Bryan:我改变了你的frame1.pack代码如下:

frame1.pack(fill='both', expand=True) 
frame1.bind('<Configure>', maxsize) 

我加入这个事件处理程序:

# attempt to prevent frame from growing past a certain size 
def maxsize(event=None): 
    print frame1.winfo_width() 
    if frame1.winfo_width() > 200: 
     print 'frame1 wider than 200 pixels' 
     frame1.pack_propagate(0) 
     frame1.config(width=200) 
     return 'break' 

上述事件处理程序检测到帧的宽度太窄大,但无法防止发生的规模增加。这是Tkinter的局限还是我误解了你的解释?

+1

我想你误会了。我的解释指出,如果您将展开设置为False并将其设置为无,则该框架将具有静态宽度并且不会增长或缩小。如果帧由于其父级而改变了大小,则在帧上设置pack_propagate不起作用,您需要将其设置在父级上。 pack_propagate仅设置框架是根据其内容更改大小,而不是基于其父项。 – 2010-12-09 17:32:29

+0

@Bryan:谢谢你的跟进。我现在知道了。 – Malcolm 2010-12-10 22:06:09

回答

20

没有单一的魔法功能强制帧的最小或固定大小。但是,通过给框架设置宽度和高度,您当然可以强制框架的大小。然后您必须做两件事:当您将此窗口放入容器中时,您需要确保几何管理器不缩小或扩大窗口。二,如果框架是其他小部件的容器,则关闭网格或打包传播,以便框架不缩小或展开以适合其自己的内容。

但是,请注意,这不会阻止您将窗口大小调整为小于内部框架。在这种情况下,框架将被裁剪。

import Tkinter as tk 

root = tk.Tk() 
frame1 = tk.Frame(root, width=100, height=100, background="bisque") 
frame2 = tk.Frame(root, width=50, height = 50, background="#b22222") 

frame1.pack(fill=None, expand=False) 
frame2.place(relx=.5, rely=.5, anchor="c") 

root.mainloop() 
相关问题