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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:45:59