Adding label to frame in Tkinter ignores the attributes of frame

折月煮酒 提交于 2019-11-27 09:33:38

You are correct about the width and height not being honored, but not about the background color. The background color is unaffected, but you can't see the background because the background fits precisely around the label. If you add padding to the label when you pack it you'll see the background.

As for the width and height... this is one of the great features of Tkinter. By default, a container widget expands or collapses to be just big enough to hold its contents. Thus, when you call pack, it causes the frame to shrink. This feature is called geometry propagation.

For the vast majority of applications, this is the behavior you want. For those rare times when you want to explicitly set the size of a container you can turn this feature off. To turn it off, call either pack_propagate or grid_propagate on the container (depending on whether you're using grid or pack on that container), giving it a value of False.

Using your code as an example, you would do:

page1.pack_propagate(False)

My recommendation is to not do that, and instead learn how to work with geometry propagation. It will make your GUIs behave better when the user resizes the windows, and you won't be spending time trying to calculate the right size for a window. Let Tkinter do that for you.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!