如何在tkinter中设置最小窗口大小?

如何在tkinter中设置最小窗口大小?,tkinter,Tkinter,我的理解是,在初始化\uuu init\uuu方法中的所有框架和小部件之后,tkinter窗口会调整大小以适应所有这些组件 我想将窗口的初始化大小设置为其最小大小。我希望能够最大化并放大窗口,但我永远不希望窗口小到足以开始隐藏小部件 我如何做到这一点?我想: def __init__(self, master): ... self.master.update_idletasks() self.master.after_idle(lambda: self.master.mi

我的理解是,在初始化
\uuu init\uuu
方法中的所有框架和小部件之后,tkinter窗口会调整大小以适应所有这些组件

我想将窗口的初始化大小设置为其最小大小。我希望能够最大化并放大窗口,但我永远不希望窗口小到足以开始隐藏小部件

我如何做到这一点?

我想:

def __init__(self, master):
    ...
    self.master.update_idletasks()
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height()))

您还可以使用以下方法立即强制更新,而无需进入主循环:

root = Tk()
# set up widgets here, do your grid/pack/place
# root.geometry() will return '1x1+0+0' here
root.update()
# now root.geometry() returns valid size/placement
root.minsize(root.winfo_width(), root.winfo_height())
at effbot tkinterbook的说明:

处理所有挂起事件,调用事件回调,完成任何 挂起几何体管理,根据需要重新绘制小部件,并调用 所有挂起的空闲任务。使用此方法时应小心,因为 如果从错误的位置调用,可能会导致非常恶劣的比赛条件 放置(例如,从事件回调或从函数中放置) 可以通过任何方式从事件回调调用的)。当在 如有疑问,请改用update_idletasks

我在尝试弄清楚如何在跳入主循环之前获取小部件的大小/位置时,经常使用这一点

root = Tk()
因为创建了根窗口。根窗口是我们程序中的主要应用程序窗口。它有一个标题栏和边框。这些由窗口管理器提供。它必须在创建任何其他小部件之前创建

root.geometry("250x150+300+300")
geometry()方法设置窗口的大小并将其定位在屏幕上。前两个参数是窗口的宽度和高度。最后两个参数是x,y屏幕坐标

app = Example(root)
这里我们创建应用程序类的实例

root.mainloop()  
最后,我们进入主循环。事件处理从这一点开始。mainloop从窗口系统接收事件,并将它们发送到应用程序小部件。当我们单击标题栏的关闭按钮或调用quit()方法时,它将终止


我希望你觉得这很有用。

我知道这个问题很老了,但这里有另一种方法:

root = Tk()
root.minsize(foo, bar)
root.minsize()将窗口的最小大小设置为foo和bar,其中foo和bar分别是窗口的宽度和高度


但是,您必须在mainloop完成运行之前运行此代码。它仅在调用命令后生效

你是说要限制用户缩小窗口吗?你真的有这么多的小部件以至于有些部件被截断了吗?或者这是一个布局问题,在布局问题上东西被截断了,可能是错误的(例如:滚动条消失了,而不是文本小部件缩小了)?这比我的答案要干净得多。谢谢这似乎根本不能回答这个问题。你的答案与设置窗口的最小尺寸有什么关系?没有一个魔法函数可以强制一个框架达到最小或固定的尺寸。然而,你当然可以通过给框架一个宽度和高度来改变框架的大小。@Miksii这个“神奇”的功能就是其他答案所给出的。这甚至不会阻止用户以任何方式调整它的大小,也不会像OP所要求的那样阻止小部件被隐藏。