在 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()
我创建了一个 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()