在 Python GUI 计算器上显示函数的输出

Display the output of a function on a Python GUI Calculator

我创建了一个 GUI 计算器,并希望包含一个附加功能“probate”。 GUI 的正常标准计算器部分工作正常,但是当我尝试包含特殊功能并单击 GUI 中的遗嘱认证按钮时,没有任何反应。计算器部分代码如下所示。我排除了很多计算器的数字和运算符

from tkinter import *
def click(num):
    global op
    op=op+str(num)
    iptext.set(op)
def evaluate():
    global op
    output = str(eval(op))
    iptext.set(output)

def clearDisplay():
    global op
    op=""
    iptext.set(op)

def probate(op):

    # global probate_fee
    VALUE_CATEGORY1 = 10000
    VALUE_CATEGORY2 = 250000
    RATE_CATEGORY1 = 0.05
    RATE_CATEGORY2 = 0.03
    RATE_CATEGORY3 = 0.01
    estate_worth=op

    if (estate_worth) < 0:
        # is_on = False
        print("Invalid Enrty")
    else:
        if (estate_worth <= VALUE_CATEGORY1):
            probate_fee = 500
        elif ((estate_worth > VALUE_CATEGORY1) & (estate_worth <= VALUE_CATEGORY2)):
            probate_fee = (estate_worth - VALUE_CATEGORY1) * RATE_CATEGORY2 + VALUE_CATEGORY1 * RATE_CATEGORY1
        elif (estate_worth > VALUE_CATEGORY2):
            probate_fee = (estate_worth - VALUE_CATEGORY2) * RATE_CATEGORY3 + (
                        (VALUE_CATEGORY2 - VALUE_CATEGORY1) * RATE_CATEGORY2) + VALUE_CATEGORY1 * RATE_CATEGORY1
        else:
            print("Invalid Entry")
    return str(probate_fee)

calc=Tk()
calc.title("GUI Calculator")
op=""
iptext=StringVar()
iparea=Entry(calc,font=('large,_font',15,'bold'),bd=10,justify="right",insertwidth=4,textvariable=iptext).grid(columnspan=10)
bt7=Button(calc,font=('arial',15,'bold'),command=lambda:click(7),bg="lavender",text="7",bd=5,padx=15,pady=10).grid(row=1,column=0)
bt8=Button(calc,font=('arial',15,'bold'),command=lambda:click(8),bg="lavender",text="8",bd=5,padx=15,pady=10).grid(row=1,column=1)
bt9=Button(calc,font=('arial',15,'bold'),command=lambda:click(9),bg="lavender",text="9",bd=5,padx=15,pady=10).grid(row=1,column=2)
add=Button(calc,font=('arial',15,'bold'),command=lambda:click('+'),bg="lavender",text="+",bd=5,padx=15,pady=10).grid(row=1,column=3)
eql=Button(calc,font=('arial',15,'bold'),command=evaluate,bg="lavender",text="=",bd=5,padx=15,pady=10).grid(row=4,column=2)
div=Button(calc,font=('arial',15,'bold'),command=lambda:click('/'),bg="lavender",text="/",bd=5,padx=15,pady=10).grid(row=4,column=3)
btC=Button(calc,font=('arial',15,'bold'),command=clearDisplay,bg="lavender",text="C",bd=5,padx=15,pady=10).grid(row=4,column=1)
btprobate = Button(calc, font=('arial', 15, 'bold'), command=lambda: evaluate, bg="lavender", text="probate", bd=5, padx=0,
                 pady=10).grid(columnspan=10)

calc.mainloop(),

没有任何反应的原因是您需要在 btprobate 的函数名后包含“()”。例如:

btprobate = Button(calc, font=('arial', 15, 'bold'), command=lambda: evaluate(), bg="lavender", text="probate", bd=5, padx=0,
                 pady=10).grid(columnspan=10)

我不确定你想做什么,但这里有一段代码可以按照评论中的要求运行(它运行,遗嘱认证按钮做一些事情):

from tkinter import *
def click(num):
    global op
    op=op+str(num)
    iptext.set(op)
def evaluate():
    global op
    output = str(eval(op))
    iptext.set(output)

def clearDisplay():
    global op
    op=""
    iptext.set(op)

def probate(op):

    # global probate_fee
    VALUE_CATEGORY1 = 10000
    VALUE_CATEGORY2 = 250000
    RATE_CATEGORY1 = 0.05
    RATE_CATEGORY2 = 0.03
    RATE_CATEGORY3 = 0.01
    estate_worth=eval(op)

    if (estate_worth) < 0:
        # is_on = False
        print("Invalid Enrty")
    else:
        if (estate_worth <= VALUE_CATEGORY1):
            probate_fee = 500
        elif ((estate_worth > VALUE_CATEGORY1) & (estate_worth <= VALUE_CATEGORY2)):
            probate_fee = (estate_worth - VALUE_CATEGORY1) * RATE_CATEGORY2 + VALUE_CATEGORY1 * RATE_CATEGORY1
        elif (estate_worth > VALUE_CATEGORY2):
            probate_fee = (estate_worth - VALUE_CATEGORY2) * RATE_CATEGORY3 + (
                        (VALUE_CATEGORY2 - VALUE_CATEGORY1) * RATE_CATEGORY2) + VALUE_CATEGORY1 * RATE_CATEGORY1
        else:
            print("Invalid Entry")
        iptext.set(str(probate_fee))
        
    # return str(probate_fee)

calc=Tk()
calc.title("GUI Calculator")
op=""
iptext=StringVar()
iparea=Entry(calc,font=('large,_font',15,'bold'),bd=10,justify="right",insertwidth=4,textvariable=iptext).grid(columnspan=10)
bt7=Button(calc,font=('arial',15,'bold'),command=lambda:click(7),bg="lavender",text="7",bd=5,padx=15,pady=10).grid(row=1,column=0)
bt8=Button(calc,font=('arial',15,'bold'),command=lambda:click(8),bg="lavender",text="8",bd=5,padx=15,pady=10).grid(row=1,column=1)
bt9=Button(calc,font=('arial',15,'bold'),command=lambda:click(9),bg="lavender",text="9",bd=5,padx=15,pady=10).grid(row=1,column=2)
add=Button(calc,font=('arial',15,'bold'),command=lambda:click('+'),bg="lavender",text="+",bd=5,padx=15,pady=10).grid(row=1,column=3)
eql=Button(calc,font=('arial',15,'bold'),command=evaluate,bg="lavender",text="=",bd=5,padx=15,pady=10).grid(row=4,column=2)
div=Button(calc,font=('arial',15,'bold'),command=lambda:click('/'),bg="lavender",text="/",bd=5,padx=15,pady=10).grid(row=4,column=3)
btC=Button(calc,font=('arial',15,'bold'),command=clearDisplay,bg="lavender",text="C",bd=5,padx=15,pady=10).grid(row=4,column=1)
btP=Button(calc,font=('arial',15,'bold'),command=lambda: probate(op), bg="lavender", text="probate", bd=5, padx=0, pady=10).grid(columnspan=10)

calc.mainloop()