[英]How to set the min and max height or width of a Frame?
可以通过以下方法控制 Tkinter 窗口的大小:
.minsize()
.maxsize()
.resizable()
是否有等效的方法来控制 Tkinter 或 ttk Frames 的大小?
@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 的限制还是我误解了您的解释?
没有单一的魔法函数可以将帧强制为最小或固定大小。 但是,您当然可以通过为框架指定宽度和高度来强制设置框架的大小。 然后,您可能还需要做两件事:当您将此窗口放入容器中时,您需要确保几何管理器不会缩小或扩展窗口。 第二,如果框架是其他小部件的容器,请关闭网格或包传播,以便框架不会缩小或扩展以适应其自身的内容。
但是请注意,这不会阻止您将窗口大小调整为小于内部框架。 在这种情况下,框架将被剪裁。
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()
解决方法 - 至少对于最小尺寸:您可以使用 grid 来管理包含在 root 中的框架,并通过设置 sticky='nsew' 使它们遵循网格尺寸。 然后你可以使用 root.grid_rowconfigure 和 root.grid_columnconfigure 来设置 minsize 的值,如下所示:
from tkinter import Frame, Tk
class MyApp():
def __init__(self):
self.root = Tk()
self.my_frame_red = Frame(self.root, bg='red')
self.my_frame_red.grid(row=0, column=0, sticky='nsew')
self.my_frame_blue = Frame(self.root, bg='blue')
self.my_frame_blue.grid(row=0, column=1, sticky='nsew')
self.root.grid_rowconfigure(0, minsize=200, weight=1)
self.root.grid_columnconfigure(0, minsize=200, weight=1)
self.root.grid_columnconfigure(1, weight=1)
self.root.mainloop()
if __name__ == '__main__':
app = MyApp()
但是正如 Brian 所写(在 2010 年:D),如果您不限制其最小尺寸,您仍然可以将窗口的大小调整为小于框架。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.