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

Python计算器代码修改:实现运算后点击数字清空结果

问题与解决方案

问题

用Python的tkinter库编写计算器时,完成两数运算得到结果后,直接点击数字按钮,新数字会叠加在结果后(例如输入5+5得到10,点击5后显示105),需要实现此时清空结果并开始新运算。

原代码如下:

import tkinter
from tkinter import *
from tkinter import messagebox
import math   
def button_1_is_Clicked():  
    global var
    var = var + "1"  
    the_data.set(var)
def button_2_is_Clicked():  
    global var  
    var = var + "2"  
    the_data.set(var)    
def button_3_is_Clicked():  
    global var  
    var = var + "3"  
    the_data.set(var)  
def button_4_is_Clicked():  
    global var  
    var = var + "4"  
    the_data.set(var)   
def button_5_is_Clicked():  
    global var  
    var = var + "5"  
    the_data.set(var)   
def button_6_is_Clicked():  
    global var  
    var = var + "6"  
    the_data.set(var)  
def button_7_is_Clicked():  
    global var  
    var = var + "7"  
    the_data.set(var)    
def button_8_is_Clicked():  
    global var  
    var = var + "8"  
    the_data.set(var)   
def button_9_is_Clicked():  
    global var  
    var = var + "9"  
    the_data.set(var)   
def button_0_is_Clicked():  
    global var  
    var = var + "0"  
    the_data.set(var)   
def button_Add_is_Clicked():  
    global A  
    global var  
    global operator
    global prevous_operator
    A = float(var)  
    operator = "+"  
    var = var + "+"
    the_data.set(var)
def button_Sub_is_Clicked():  
    global A  
    global var  
    global operator
    global prevous_operator
    A = float(var)  
    operator = "-"  
    var = var + "-"  
    the_data.set(var)
def button_Mul_is_Clicked():  
    global A  
    global var  
    global operator
    global prevous_operator
    A = float(var)  
    operator = "*"  
    var = var + "*"  
    the_data.set(var)
def button_Div_is_Clicked():  
    global A  
    global var  
    global operator
    global prevous_operator
    A = float(var)  
    operator = "/"  
    var = var + "/"  
    the_data.set(var)
def button_Equal_is_Clicked():  
    global A  
    global var  
    global operator  
    A = float(var)  
    operator = "="  
    var = var + "="  
    the_data.set(var)
def button_Sqrt_is_Clicked():
    global A
    global var
    global operator
    global prevous_operator
    A=float(var)
    operator="sqrt"
    var="√"+var
    the_data.set(var)
def button_Square_is_Clicked():
    global A
    global var
    global operator
    A=float(var)
    operator="square"
    var=var+"*"+var
    the_data.set(var)
def button_Percent_is_Clicked():  
    global A  
    global var  
    global operator
    global prevous_operator
    A = float(var)  
    operator = "%"  
    var = var + "%"  
    the_data.set(var)
def button_Inv_is_Clicked():  
    global A  
    global var  
    global operator
    global prevous_operator
    A = float(var)  
    operator = "1/x"  
    var = "1/"+var  
    the_data.set(var)
    var = ""
def button_C_is_Clicked():  
    global A  
    global var  
    global operator  
    var = ""  
    A = 0  
    operator = ""  
    the_data.set("0")

def button_PlusMinus_is_Clicked():  
    global A  
    global var  
    global operator  
    A = float(var)  
    operator = "+/-"  
    var = var + "+/-"  
    the_data.set(var) 

def button_MC_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "MC"  
    the_data.set("") 

def button_MR_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "MR"  
    the_data.set("") 

def button_MS_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "MS"  
    the_data.set("") 

def button_MPlus_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "M+"  
    the_data.set("") 

def button_MMinus_is_Clicked():  
    global A  
    global var  
    global operator
    operator = "M-"  
    the_data.set("")

def button_CE_is_Clicked():
    global var
    var = var[:-1]
    if var == "":
        the_data.set("0")
    else:
        the_data.set(var)


    

var = ""
A = 0
operator = ""
memory = 0

def res():
    global A
    global operator
    global var
    global memory
    var2 = var
    try:
        if operator == "+":
            a = float((var2.split("+")[1]))
            A += a
            the_data.set(A)
            var = str(A)
        elif operator == "-":
            a = float((var2.split("-")[1]))
            A -= a
            the_data.set(A)
            var = str(A)
            var = ""
        elif operator == "*":
            a = float((var2.split("*")[1]))
            A *= a
            the_data.set(A)
            var = str(A)
            var = ""
        elif operator == "/":
            a = float((var2.split("/")[1]))
            if a == 0:
                raise ZeroDivisionError
            else:
                A /= a
                the_data.set(A)
                var = str(A)
                var = ""
        elif operator == "sqrt":
            if A < 0:
                raise ValueError("Cannot take square root of a negative number.")
            A = math.sqrt(A)
            the_data.set(A)
            var = str(A)
            var = ""
        elif operator == "square":
            a=float((var2.split("*")[1]))
            A*=A
            the_data.set(A)
            var = str(A)
            var = ""
        elif operator == "%":
            a = float(var2.split("%")[0])
            A *= (a/100)
            the_data.set(A)
            var = str(A)
            var = ""
        elif operator == "1/x":
            if A == 0:
                raise ZeroDivisionError("Cannot divide by zero.")
            A = 1/A
            the_data.set(A)
            var = str(A)
            var = ""
        elif operator == "+/-":
            A = -A
            the_data.set(A)
            var = str(A)
            var = ""
        elif operator == "MC":
            memory = 0
        elif operator == "MR":
            A = memory
            the_data.set(A)
        elif operator == "MS":
            memory = A
        elif operator == "M+":
            memory += A
        elif operator == "M-":
            memory -= A
        elif operator == "CE":
            if len(var) > 1:
                var = var[:-1]
                A = float(var)
                the_data.set(A)
            else:
                var = ""
                A = 0
                the_data.set(0)
       

    except ZeroDivisionError as e:
        messagebox.showerror("Error", str(e))
        var = ""
    except ValueError as e:
        messagebox.showerror("Error", str(e))
        var = ""

解决方案

核心思路是添加一个状态变量,标记当前是否处于“刚显示运算结果”的状态。当用户点击数字按钮时,若处于该状态,则清空输入缓冲区var后再添加新数字,并重置状态;若未处于该状态,则正常追加数字。

修改后的完整代码:

import tkinter
from tkinter import *
from tkinter import messagebox
import math   

# 添加状态变量:标记是否刚显示运算结果
is_result_displayed = False

def button_1_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "1"
        is_result_displayed = False
    else:
        var = var + "1"  
    the_data.set(var)

def button_2_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "2"
        is_result_displayed = False
    else:
        var = var + "2"  
    the_data.set(var)    

def button_3_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "3"
        is_result_displayed = False
    else:
        var = var + "3"  
    the_data.set(var)  

def button_4_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "4"
        is_result_displayed = False
    else:
        var = var + "4"  
    the_data.set(var)   

def button_5_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "5"
        is_result_displayed = False
    else:
        var = var + "5"  
    the_data.set(var)   

def button_6_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "6"
        is_result_displayed = False
    else:
        var = var + "6"  
    the_data.set(var)  

def button_7_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "7"
        is_result_displayed = False
    else:
        var = var + "7"  
    the_data.set(var)    

def button_8_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "8"
        is_result_displayed = False
    else:
        var = var + "8"  
    the_data.set(var)   

def button_9_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "9"
        is_result_displayed = False
    else:
        var = var + "9"  
    the_data.set(var)   

def button_0_is_Clicked():  
    global var, is_result_displayed
    if is_result_displayed:
        var = "0"
        is_result_displayed = False
    else:
        var = var + "0"  
    the_data.set(var)   

def button_Add_is_Clicked():  
    global A  
    global var  
    global operator
    global is_result_displayed
    # 点击运算符时重置状态,允许基于结果继续运算
    is_result_displayed = False
    A = float(var)  
    operator = "+"  
    var = var + "+"
    the_data.set(var)

def button_Sub_is_Clicked():  
    global A  
    global var  
    global operator
    global is_result_displayed
    is_result_displayed = False
    A = float(var)  
    operator = "-"  
    var = var + "-"  
    the_data.set(var)

def button_Mul_is_Clicked():  
    global A  
    global var  
    global operator
    global is_result_displayed
    is_result_displayed = False
    A = float(var)  
    operator = "*"  
    var = var + "*"  
    the_data.set(var)

def button_Div_is_Clicked():  
    global A  
    global var  
    global operator
    global is_result_displayed
    is_result_displayed = False
    A = float(var)  
    operator = "/"  
    var = var + "/"  
    the_data.set(var)

def button_Equal_is_Clicked():  
    global A  
    global var  
    global operator  
    A = float(var)  
    operator = "="  
    var = var + "="  
    the_data.set(var)

def button_Sqrt_is_Clicked():
    global A
    global var
    global operator
    global is_result_displayed
    is_result_displayed = False
    A=float(var)
    operator="sqrt"
    var="√"+var
    the_data.set(var)

def button_Square_is_Clicked():
    global A
    global var
    global operator
    global is_result_displayed
    is_result_displayed = False
    A=float(var)
    operator="square"
    var=var+"*"+var
    the_data.set(var)

def button_Percent_is_Clicked():  
    global A  
    global var  
    global operator
    global is_result_displayed
    is_result_displayed = False
    A = float(var)  
    operator = "%"  
    var = var + "%"  
    the_data.set(var)

def button_Inv_is_Clicked():  
    global A  
    global var  
    global operator
    global is_result_displayed
    is_result_displayed = False
    A = float(var)  
    operator = "1/x"  
    var = "1/"+var  
    the_data.set(var)
    var = ""

def button_C_is_Clicked():  
    global A  
    global var  
    global operator  
    global is_result_displayed
    var = ""  
    A = 0  
    operator = ""  
    is_result_displayed = False
    the_data.set("0")

def button_PlusMinus_is_Clicked():  
    global A  
    global var  
    global operator  
    global is_result_displayed
    is_result_displayed = False
    A = float(var)  
    operator = "+/-"  
    var = var + "+/-"  
    the_data.set(var) 

def button_MC_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "MC"  
    the_data.set("") 

def button_MR_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "MR"  
    the_data.set("") 

def button_MS_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "MS"  
    the_data.set("") 

def button_MPlus_is_Clicked():  
    global A  
    global var  
    global operator  
    operator = "M+"  
    the_data.set("") 

def button_MMinus_is_Clicked():  
    global A  
    global var  
    global operator
    operator = "M-"  
    the_data.set("")

def button_CE_is_Clicked():
    global var
    var = var[:-1]
    if var == "":
        the_data.set("0")
    else:
        the_data.set(var)

var = ""
A = 0
operator = ""
memory = 0

def res():
    global A
    global operator
    global var
    global memory
    global is_result_displayed
    var2 = var
    try:
        if operator == "+":
            a = float((var2.split("+")[1]))
            A += a
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "-":
            a = float((var2.split("-")[1]))
            A -= a
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "*":
            a = float((var2.split("*")[1]))
            A *= a
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "/":
            a = float((var2.split("/")[1]))
            if a == 0:
                raise ZeroDivisionError
            else:
                A /= a
                the_data.set(A)
                var = str(A)
                is_result_displayed = True
        elif operator == "sqrt":
            if A < 0:
                raise ValueError("Cannot take square root of a negative number.")
            A = math.sqrt(A)
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "square":
            A *= A
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "%":
            a = float(var2.split("%")[0])
            A *= (a/100)
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "1/x":
            if A == 0:
                raise ZeroDivisionError("Cannot divide by zero.")
            A = 1/A
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "+/-":
            A = -A
            the_data.set(A)
            var = str(A)
            is_result_displayed = True
        elif operator == "MC":
            memory = 0
        elif operator == "MR":
            A = memory
            the_data.set(A)
        elif operator == "MS":
            memory = A
        elif operator == "M+":
            memory += A
        elif operator
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:43:45