I have been working on a note taking program for myself and it is going well however I have had a lot of problems with getting all my widgets placed where I want them using the .pack()
or .grid()
options.
After looking around I found that I could use the .place()
option instead. Before I decided to use .place()
I found countless forum post saying "don't use .place()
!".
I was at a stand still with my other options so I decided to give .place()
a try. It turns out .place()
is exactly what I needed to fix my layout issues and I just don't understand why everyone is hating on .place()
so much.
Is there something inherently wrong with .place()
? Or do people just prefer to use .pack()
and .grid()
for some practical reason other than ease of use?
There's nothing really wrong with .place
, although using grid
and pack
give you more maintainable code. If you want to add a feature then place
would require you to alter loads of absolute placements to fit a button in, for example.
If you need to use it then use it, there's no real problem with it, it just isn't the most maintainable solution to many problems. As you say, it's a matter of preference and ease of use.
Edit: there's an excellent answer you can read about it here.
I'm not sure what evidence you have that says everyone says not to use place
. I suspect if you're judging by stackoverflow posts, you're mostly reading my opinion a hundred times rather than a hundred different opinions.
I recommend against place
mainly because it requires more work to make a UI that is responsive to changes in fonts, resolutions, and window sizes. While it's possible to write a GUI that uses place and is responsive to those things, it requires a lot of work to get right.
One advantage that both pack
and grid
have over place
is that they allow tkinter to properly configure the size of the root and Toplevel
windows. With place
you must hard-code a size. Tkinter is remarkably good at making windows to be the exact right size without you having to decide on explicit sizes.
In addition, long term maintenance of applications that use place
is difficult. If you want to add a new widget, you will almost certainly have to adjust every other widget. With grid
and pack
it's much easier to add and remove widgets without having to change the layout of all of the other widgets. If I've learned anything over years of using tk and tkinter is that my widget layout changes a lot during development.
place
is mostly useful for edge cases. For example, if you want to center a single widget inside another widget, place
is fantastic. Also, if you want to place a widget such that it is independent of other widgets, place
is great for that too.