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

Kiw*_*iwi 6 python user-interface tkinter

使用此代码,窗口是500乘500,这是我要的:

from tkinter import *
root = Tk()

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

frame.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

但是,当我向框架添加文本框时,它会缩小到文本框的大小:

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

为什么会发生这种情况,我该如何防止它发生?

Bry*_*ley 6

默认情况下,框架已启用"包传播".这意味着封隔器"计算主机必须多大才能完全满足其从属设备的需求,并将主机所要求的宽度和高度设置为这些尺寸"(引自官方tcl/tk手册页[ 1 ] ).

对于绝大多数情况,这是完全正确的行为.对于您不想要的时间,您可以调用pack_propagatemaster并将值设置为false.我认为在近20年的tk编程中,我只需要这样做六次左右,如果那样的话.

另一个选择是wm_geometry在创建所有小部件后用于设置顶层的大小.这实际上与用户手动调整窗口大小相同.这仅适用于顶层窗户,但不能wm_geometry在框架上使用.