为什么Tkinter中Entry组件下方的按钮会分散且列对齐异常?
问题原因
- 布局中的Entry控件仅放在第0行第0列,没有设置跨列属性,宽度为49的输入框会直接把第0列的宽度撑到几乎占满整个窗口,导致后续第1列及更靠后的列整体向右偏移,无法对齐到预期位置。
- 额外需要注意
Entry(...).grid(...)的写法存在隐患:grid()方法返回值为None,你最终得到的expression_entry变量是None而非输入框实例,后续如果要调用输入框的方法会直接报错。
修复方案
- 给Entry的grid方法添加
columnspan参数,数值和计算器按钮的总列数保持一致即可,常规计算器一般是4列,所以设为columnspan=4。 - 给窗口的每一列设置相同的weight,保证所有列宽度均匀分布:
for col in range(4): gui.grid_columnconfigure(col, weight=1)
- 修正Entry的赋值写法,先实例化再调用grid方法。
修复后可运行的完整代码
from tkinter import * # 配置窗口 gui = Tk() gui.title("Calculator") gui.geometry("400x500") # 保证4列宽度均匀分布 for col in range(4): gui.grid_columnconfigure(col, weight=1) # 输入输出相关变量 expression = StringVar() input_ = "" # 修正输入框写法,添加跨列属性 expression_entry = Entry(gui, textvariable=expression, width=49) expression_entry.grid(column=0, row=0, columnspan=4) # 创建按钮 number_1 = Button(gui, width=3, height=2) number_1.grid(column=0, row=1) number_2 = Button(gui, width=3, height=2) number_2.grid(column=1, row=1) gui.mainloop()
内容的提问来源于stack exchange,提问作者Kamil Poreba
相关产品推荐
相关产品推荐

