如何在Python Tkinter非OOP模式下实现计算器标签内容追加?
解决方案
核心修改思路
你当前的问题是每次点击按钮都用var.set(字符)直接覆盖了标签原有内容,要实现追加效果,只需先获取当前标签的内容,拼接新字符后重新设置即可。具体来说,把每个按钮函数里的var.set("xxx")改成var.set(var.get() + "xxx")。
修正后的完整代码
from tkinter import * e = Tk(className="Krishna's Calculator") e.geometry("460x614") e.resizable(0,0) def edivide(): var.set(var.get() + "÷") def etimes(): var.set(var.get() + "×") def eaddition(): var.set(var.get() + "+") def esubtraction(): var.set(var.get() + "-") def edecimal(): var.set(var.get() + ".") def equals(): # 基础计算逻辑:替换特殊运算符后计算结果,可根据需求调整 try: expression = var.get().replace("÷", "/").replace("×", "*") result = eval(expression) var.set(str(result)) except: var.set("Error") def clear(): var.set("") def e0(): var.set(var.get() + "0") def e1(): var.set(var.get() + "1") def e2(): var.set(var.get() + "2") def e3(): var.set(var.get() + "3") def e4(): var.set(var.get() + "4") def e5(): var.set(var.get() + "5") def e6(): var.set(var.get() + "6") def e7(): var.set(var.get() + "7") def e8(): var.set(var.get() + "8") def e9(): var.set(var.get() + "9") def epercent(): var.set(var.get() + "%") # 修正原代码中加号按钮的绑定错误 divide = Button(e, text = "÷",width=4, command = edivide, font = "Helvetica 50", highlightbackground='#8533ff') divide.place(x = 344, y = 301) multiply = Button(e, text = "×",width=4, command = etimes, font = "Helvetica 50", highlightbackground='#8533ff') multiply.place(x = 344, y = 364) minus = Button(e, text = "-",width=4, command = esubtraction, font = "Helvetica 50", highlightbackground='#8533ff') minus.place(x = 344, y = 426) plus = Button(e, text = "+",width=4, command = eaddition, font = "Helvetica 50", highlightbackground='#8533ff') plus.place(x = 344, y = 488) equal = Button(e, text = "=",width=4, command = equals, font = "Helvetica 50", highlightbackground='#8533ff') equal.place(x = 344, y = 551) aclear = Button(e, text = "AC",width=8, command = clear, font = "Helvetica 50",highlightbackground='#737373') aclear.place(x = 0, y = 302) percentage = Button(e, text = "%",width=4, command = epercent, font = "Helvetica 50",highlightbackground='#737373') percentage.place(x = 228, y = 302) decimal = Button(e, text = ".",width=4, command = edecimal, font = "Arial 50 bold",highlightbackground='#ffffff') decimal.place(x = 228, y = 550) number0 = Button(e, text = "0",width = 8, command = e0, font = "Arial 50 bold",highlightbackground='#ffffff') number0.place(x = 0, y = 550) number1 = Button(e, text = "1",width =4, command = e1, font = "Arial 50 bold",highlightbackground='#ffffff') number1.place(x = 0, y = 488) number2 = Button(e, text = "2",width =4, command = e2, font = "Arial 50 bold",highlightbackground='#ffffff') number2.place(x = 114, y = 488) number3 = Button(e, text = "3",width=4, command = e3, font = "Arial 50 bold",highlightbackground='#ffffff') number3.place(x = 228, y = 488) number4 = Button(e, text = "4",width=4, command = e4, font = "Arial 50 bold",highlightbackground='#ffffff') number4.place(x = 0, y = 426) number5 = Button(e, text = "5",width=4, command = e5, font = "Arial 50 bold",highlightbackground='#ffffff') number5.place(x = 114, y = 426) number6 = Button(e, text = "6",width=4, command = e6, font = "Arial 50 bold",highlightbackground='#ffffff') number6.place(x = 228, y = 426) number7 = Button(e, text = "7",width=4, command = e7, font = "Arial 50 bold" ,highlightbackground='#ffffff') number7.place(x = 0, y = 364) number8 = Button(e, text = "8",width=4, command = e8, font = "Arial 50 bold",highlightbackground='#ffffff') number8.place(x = 114, y = 364) number9 = Button(e, text = "9",width=4, command = e9, font = "Arial 50 bold",highlightbackground='#ffffff') number9.place(x = 228, y = 364) var = StringVar() label = Label(e, textvariable = var,bd=5,width=16, relief = SOLID, font = "Arial 50 ",bg="white", fg="black",activebackground="#bb99ff", height = 5,pady = 3) label.place(x=0,y=0) e.mainloop()
额外优化提示
如果觉得每个按钮写单独函数太繁琐,可以用lambda简化代码,比如把number1 = Button(..., command=e1)改成number1 = Button(..., command=lambda: var.set(var.get() + "1")),这样可以省去所有单个字符的按钮函数,让代码更简洁。
内容的提问来源于stack exchange,提问作者Ippos
相关产品推荐
相关产品推荐

