我正在使用 Python/Tkinter 设计简单的输入对话框grid
几何,并得到一些意想不到的行为。当我开始使用这段代码时:
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)
...这是渲染窗口在我的机器上的样子(Windows 7,Python 2.7.3)。请注意,绿线实际上并不存在,我只是用它们来布置我认为应该是行和列的位置。
到目前为止,一切都很好。现在我想设置width
of entName
up to 60
,为输入客户姓名提供更明显的空间。因为我有它的columnspan
set to 2
,并且因为每个小部件都设置为tk.W
为了sticky
选项,我期望增加宽度entName
除了加宽条目小部件本身并相应地加宽窗口之外,不会有任何效果。所有其他小部件相对于彼此的位置应该保持相同 - 对吗?
没有。加宽entName
也导致entID
被推出去lblID
:
那么我错过了什么?为什么不entID
留在原来的地方吗?除了将第 2 行挡在自己的框架中之外,还有什么方法可以让它保持在原位吗?