You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的垂直高度,避免过度放大字体导致行高被过度撑大;同时给按钮所在的行/列配置固定最小尺寸,进一步控制间距:

  1. 修改Entry的初始化代码:
# 用ipady补充垂直高度,字体大小适度调整
field = Entry(window,width=35, bd=0,textvariable=equation,font=("Arial 20"), ipady=5)
field.grid(columnspan=4,padx=5,pady=10)
  1. 在按钮定义前添加行/列配置:
# 配置按钮所在行的最小高度,列的最小宽度
for row in range(2, 6):
    window.grid_rowconfigure(row, minsize=50)
for col in range(4):
    window.grid_columnconfigure(col, minsize=50)
  1. 给按钮的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:27:12