如何在基于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
相关产品推荐
相关产品推荐

