Tkinter计算器:如何缩小按钮间距且保留大尺寸Entry输入框
解决Tkinter计算器Entry放大后按钮间距变大的问题
问题原因
增大Entry的字体后,Entry所在的默认行(row=0)会被自动撑高,Tkinter的grid布局默认会在各行、各列之间保留空白,再加上按钮的grid布局未设置间距控制参数,最终导致按钮之间的间距被拉大。
解决方案
以下两种方式可以在保留大尺寸Entry的同时,缩小按钮之间的间距:
方案1:给按钮的grid布局添加紧凑间距参数
直接在每个按钮的grid()方法中设置padx和pady参数,控制按钮间的水平、垂直间距(数值可根据需求调整):
示例修改(以按钮1为例,其余按钮同理):
button1 = Button(window,text="1",command=lambda:press(1),height=4,width=7) button1.grid(row=2,column=0, padx=1, pady=1)
方案2:优化Entry高度+统一配置grid行/列
用ipady参数增加Entry的垂直高度,避免过度放大字体导致行高被过度撑大;同时给按钮所在的行/列配置固定最小尺寸,进一步控制间距:
- 修改Entry的初始化代码:
# 用ipady补充垂直高度,字体大小适度调整 field = Entry(window,width=35, bd=0,textvariable=equation,font=("Arial 20"), ipady=5) field.grid(columnspan=4,padx=5,pady=10)
- 在按钮定义前添加行/列配置:
# 配置按钮所在行的最小高度,列的最小宽度 for row in range(2, 6): window.grid_rowconfigure(row, minsize=50) for col in range(4): window.grid_columnconfigure(col, minsize=50)
- 给按钮的grid添加紧凑间距参数:
button1.grid(row=2,column=0, padx=0, pady=0)
完整修改后的代码
from tkinter import * import math window = Tk() window.title("Calculator") window.geometry("250x370") expression = "" equation = StringVar() # 优化Entry高度:字体适度+ipady补充垂直空间 field = Entry(window,width=35, bd=0,textvariable=equation,font=("Arial 20"), ipady=5) field.grid(columnspan=4,padx=5,pady=10) def press(num): global expression expression=expression+str(num) equation.set(expression) def calculate(): try: global expression result= str(eval(expression)) expression=str(result) equation.set(expression) except: expression="" equation.set("error") def clearer(): global expression expression="" equation.set("") # 配置按钮行/列的最小尺寸 for row in range(2, 6): window.grid_rowconfigure(row, minsize=50) for col in range(4): window.grid_columnconfigure(col, minsize=50) # 按钮部分:添加紧凑间距参数 button1 = Button(window,text="1",command=lambda:press(1),height=4,width=7) button1.grid(row=2,column=0, padx=1, pady=1) button2 = Button(window,text="2",command=lambda:press(2),height=4,width=7) button2.grid(row=2,column=1, padx=1, pady=1) button3 = Button(window,text="3",command=lambda:press(3),height=4,width=7) button3.grid(row=2,column=2, padx=1, pady=1) button4 = Button(window,text="4",command=lambda:press(4),height=4,width=7) button4.grid(row=3,column=0, padx=1, pady=1) button5 = Button(window,text="5",command=lambda:press(5),height=4,width=7,) button5.grid(row=3,column=1, padx=1, pady=1) button6 = Button(window,text="6",command=lambda:press(6),height=4,width=7) button6.grid(row=3,column=2, padx=1, pady=1) button7 = Button(window,text="7",command=lambda:press(7),height=4,width=7) button7.grid(row=4,column=0, padx=1, pady=1) button8 = Button(window,text="8",command=lambda:press(8),height=4,width=7) button8.grid(row=4,column=1, padx=1, pady=1) button9 = Button(window,text="9",command=lambda:press(9),height=4,width=7) button9.grid(row=4,column=2, padx=1, pady=1) button0 = Button(window,text="0",command=lambda:press(0),height=4,width=7) button0.grid(row=5,column=0, padx=1, pady=1) clear = Button(window,text="Clear",command=clearer,height=4,width=7) clear.grid(row=5,column=1, padx=1, pady=1) equals = Button(window,text="=",command=calculate,height=4,width=7) equals.grid(row=5,column=2, padx=1, pady=1) plus = Button(window,text="+",command=lambda:press("+"),height=4,width=7) plus.grid(row=2,column=3, padx=1, pady=1) minus = Button(window,text="-",command=lambda:press("-"),height=4,width=7) minus.grid(row=3,column=3, padx=1, pady=1) multiply = Button(window,text="*",command=lambda:press("*"),height=4,width=7) multiply.grid(row=4,column=3, padx=1, pady=1) divide = Button(window,text="/",command=lambda:press("/"),height=4,width=7) divide.grid(row=5,column=3, padx=1, pady=1) window.mainloop()
你可以根据实际显示效果,调整padx、pady的数值,以及Entry的font和ipady参数,达到最理想的布局。
内容的提问来源于stack exchange,提问作者theanime kid
相关产品推荐
相关产品推荐

