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

如何在基于Tkinter的Python计算器中创建退格(Backspace)按钮?

给Tkinter计算器添加退格功能

步骤1:实现退格功能函数

在现有功能函数后新增一个处理退格的函数,它会删除表达式的最后一个字符并同步更新输入框:

def bbackspace():
    global exp
    if exp:  # 仅当表达式不为空时执行退格操作
        exp = exp[:-1]
        input.set(exp)

步骤2:绑定退格按钮

原代码里第0行有个未绑定功能的bX按钮,直接修改它的文本和绑定命令,将其转为退格按钮:

bX=tk.Button(root,text='←',padx=78,pady=40,fg='#FFFFFF',bg='#d21405',font=('sans-serif, 14'),command=bbackspace)

修改后的完整代码

import tkinter as tk
from tkinter import *

root=tk.Tk()
root.geometry("720x1320")
root.title('Calculator')
root.resizable(0, 0)
root['background']='#444444'

def bclick(num):
    global exp
    exp= exp+str(num)
    input.set(exp)

def bclear():
    global exp
    exp=""
    input.set("")

def bequal():
    global exp
    result=str(eval(exp))
    input.set(result)
    exp=""

# 新增退格函数
def bbackspace():
    global exp
    if exp:
        exp = exp[:-1]
        input.set(exp)

exp=""
input=StringVar()

input_frame = Frame(root, width = 312, height = 100, bd = 0, highlightbackground = "black", highlightcolor = "black", highlightthickness = 1)
input_frame.pack(side = TOP)

# 输入框
dis=Entry(input_frame,textvariable=input,bg='#cccccc',fg='#000000',justify=RIGHT,font= ("sans-serif 16"))
dis.place(x=0,y=0)
dis.pack(ipady=197)

# 第0行按钮
bC=tk.Button(root,text='C',padx=166,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclear())
bC.place(x=0,y=479)

# 修改为退格按钮
bX=tk.Button(root,text='←',padx=78,pady=40,fg='#FFFFFF',bg='#d21405',font=('sans-serif, 14'),command=bbackspace)
bX.place(x=360,y=479)

bdiv=tk.Button(root,text='÷',padx=78,pady=40,fg='#ffffff',font=('sans-serif, 14'),command=lambda:bclick("/"),bg='#1138be')
bdiv.place(x=540,y=479)

# 第1行按钮
b7=tk.Button(root,text='7',padx=78,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("7"))
b7.place(x=0,y=631)

b8=tk.Button(root,text='8',padx=78,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("8"))
b8.place(x=180,y=631)
b9=tk.Button(root,text='9',padx=78,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("9"))
b9.place(x=360,y=631)

bmul=tk.Button(root,text='×',padx=78,pady=40,bg='#1138be',fg='#ffffff',font=('sans-serif, 14'),command=lambda:bclick("*"))
bmul.place(x=540,y=631)

# 第2行按钮
b4=tk.Button(root,text='4',padx=78,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("4"))
b4.place(x=0,y=783)

b5=tk.Button(root,text='5',padx=80,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("5"))
b5.place(x=180,y=783)

b6=tk.Button(root,text='6',padx=79,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("6"))
b6.place(x=360,y=783)

badd=tk.Button(root,text='+',padx=80,pady=40,bg='#1138be',fg='#ffffff',font=('sans-serif, 14'),command=lambda:bclick("+"))
badd.place(x=540,y=783)

# 第3行按钮
b1=tk.Button(root,text='1',padx=78,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("1"))
b1.place(x=0,y=935)

b2=tk.Button(root,text='2',padx=78,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("2"))
b2.place(x=180,y=935)

b3=tk.Button(root,text='3',padx=78,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("3"))
b3.place(x=360,y=935)

bsub=tk.Button(root,text='-',padx=82,pady=40,bg='#1138be',fg='#ffffff',font=('sans-serif, 14'),command=lambda:bclick("-"))
bsub.place(x=540,y=935)

# 第4行按钮
b0=tk.Button(root,text='0',padx=165,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("0"))
b0.place(x=0,y=1087)

bdot=tk.Button(root,text='.',padx=85,pady=40,bg='#FFFFFF',font=('sans-serif, 14'),command=lambda:bclick("."))
bdot.place(x=360,y=1087)

bans=tk.Button(root,text='=',padx=80,pady=40,bg='#002366',fg='#ffffff',font=('sans-serif, 14'),command=lambda:bequal())
bans.place(x=540,y=1087)

root.mainloop()

功能说明

  • 退格函数通过字符串切片exp[:-1]删除最后一个字符,加入非空判断避免空字符串操作报错。
  • 按钮文本用←更直观,也可根据需求改为Backspace。

内容的提问来源于stack exchange,提问作者Vivek Sorout

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:31:15