I am developing a simple input dialog in Python / Tkinter using grid geometry and getting some unexpected behavior. When I start with this code:
winAddNew = tk.Toplevel() winAddNew.title('Add New Customer') lblName = tk.Label(winAddNew, anchor=tk.W,font=fntNormal, text='Enter the complete name of the customer:') entName = tk.Entry(winAddNew, justify=tk.LEFT, font=fntNormal, width=20, textvariable=ctrlNewCustomerName) lblID = tk.Label(winAddNew, anchor=tk.W,font=fntNormal, text='Enter a unique three-character ID:') entID = tk.Entry(winAddNew, justify=tk.LEFT, font=fntNormal, width=8, textvariable=ctrlNewCustomerID) lblName.grid(row=0,column=0,columnspan=2,sticky=tk.W,padx=10,pady=(10,0)) entName.grid(row=1,column=0,columnspan=2,sticky=tk.W,padx=10,pady=(5,0)) lblID.grid(row=2,column=0,sticky=tk.W,padx=(10,0),pady=10) entID.grid(row=2,column=1,sticky=tk.W,padx=(0,10),pady=10)
... this is what the rendered window looks like on my machine (Windows 7, Python 2.7.3). Note that the green lines are actually missing, I just use them to lay out what I think should occupy the positions of rows and columns.

So far so good. Now I want to set the width from entName to 60 to give a more prominent room for entering the client name. Since I have columnspan set to 2 , and because each widget is set with tk.W for the sticky parameter, I expect that increasing the width of entName will have no effect other than expanding the input widget itself and expanding the window, respectively. All other widget positions relative to each other should remain unchanged - right?
Nope. The entName also causes entName to be disconnected from lblID :

So what am I missing? Why entID stay where it was? And is there any way to make it stay in place, except block line 2 in its own frame?