为什么在Tkinter框架中添加文本框时会调整大小?

6 投票
1 回答
2268 浏览
提问于 2025-04-16 04:52

这段代码创建了一个500乘500的窗口,这是我想要的效果:

from tkinter import *
root = Tk()

frame = Frame(root, width=500, height=500)

frame.pack()
root.mainloop()

但是,当我在这个窗口里添加一个文本框时,窗口的大小却缩小到了只够文本框的大小:

from tkinter import *
root = Tk()

frame = Frame(root, width=500, height=500)

text = Text(frame, width=10, height=2) # THESE TWO
text.pack()                            # LINES HERE

frame.pack()
root.mainloop()

这是为什么呢?我该怎么做才能避免这种情况发生呢?

1 个回答

6

默认情况下,框架是开启了“打包传播”的。这意味着打包器会计算出一个主框架需要多大,才能刚好满足它里面所有子框架的需求,然后把主框架的宽度和高度设置成这些计算出来的尺寸(这段话是引用官方的tcl/tk手册的内容)。

在绝大多数情况下,这种行为是完全正确的。但是如果你不想要这种效果,可以在主框架上调用 pack_propagate 并把值设置为 false。我在将近20年的tk编程中,只有大约六七次需要这样做,真的不多。

你还有另一个选择,就是在创建完所有小部件后,使用 wm_geometry 来设置顶层窗口的大小。这实际上和用户手动调整窗口大小的效果是一样的。不过要注意,这个方法只适用于顶层窗口,不能在框架上使用 wm_geometry

撰写回答