30

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

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

我该如何做到这一点?

4

4 回答 4

53

你也可以在不进入主循环的情况下立即强制更新,使用如下:

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

effbot tkinterbook上update()的描述:

处理所有挂起的事件,调用事件回调,完成任何挂起的几何管理,根据需要重绘小部件,并调用所有挂起的空闲任务。这个方法应该小心使用,因为如果从错误的地方调用它可能会导致非常糟糕的竞争条件(例如,从事件回调中,或者从可以以任何方式从事件回调中调用的函数等) .)。如有疑问,请改用 update_idletasks。

在尝试弄清楚如何在跳入主循环之前获取小部件的大小/位置之类的事情时,我已经使用了很多。

于 2012-05-04T15:49:47.133 回答
26

我知道这个问题很老,但这是另一种方式:

root = Tk()
root.minsize(foo, bar)

root.minsize()将窗口的最小尺寸设置为foobar,其中foobar分别是窗口的宽度和高度。

但是,您必须在 mainloop 完成运行之前运行此代码。只有调用该命令后才会生效。

于 2015-10-21T22:08:16.507 回答
4

我想到了:

def __init__(self, master):
    ...
    self.master.update_idletasks()
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height()))
于 2012-05-04T14:11:48.320 回答
-6
root = Tk()

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

root.geometry("250x150+300+300")

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

app = Example(root)

这里我们创建应用程序类的实例。

root.mainloop()  

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

在此处输入图像描述

我希望你觉得这很有用。

于 2014-08-25T12:06:38.767 回答