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

时间:2012-05-04 12:33:15

标签: tkinter

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

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

我如何做到这一点?

4 个答案:

答案 0 :(得分:39)

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

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。

我一直在使用这个很好的协议,同时试图弄清楚如何在进入主循环之前获取小部件的大小/位置等事情。

答案 1 :(得分:10)

我知道这个问题已经过时了,但这是另一种方式:

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

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

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

答案 2 :(得分:2)

我明白了:

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

答案 3 :(得分:-4)

root = Tk()

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

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

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

app = Example(root)

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

root.mainloop()  

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

enter image description here

我希望你发现这很有用。