如何设置框架的最小和最大高度或宽度?

Mal*_*olm 19 python user-interface tkinter ttk

可以通过以下方法控制Tkinter窗口的大小:

.minsize()
.maxsize()
.resizable()
Run Code Online (Sandbox Code Playgroud)

是否有相同的方法来控制Tkinter或ttk帧的大小?

@Bryan:我将你的frame1.pack代码改为:

frame1.pack(fill='both', expand=True)
frame1.bind( '<Configure>', maxsize )
Run Code Online (Sandbox Code Playgroud)

我添加了这个事件处理程序:

# 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'
Run Code Online (Sandbox Code Playgroud)

上面的事件处理程序检测到帧的宽度太大,但无法阻止大小的增加发生.这是Tkinter的限制还是我误解了你的解释?

Bry*_*ley 24

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

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

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()
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 8

解决方法 - 至少对于最小尺寸:您可以使用网格来管理 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()
Run Code Online (Sandbox Code Playgroud)

但正如 Brian 所写(2010 年:D),如果您不限制窗口的最小尺寸,您仍然可以将窗口大小调整为小于框架。

  • 最大尺寸在哪里?我需要最大尺寸而不是最小尺寸 (2认同)