我正在尝试创建此GUI计算器,但似乎无法调用'StringVar'对象。该问题在我的其他运算符(例如-,*,/,=等)中仍然存在(我对编码和python很熟悉),
从tkinter导入Tk,Label,StringVar,Entry,Button,W,E
类计算器:操作数:StringVar运算符:无结果:浮点数
def __init__(self):
master = Tk()
self.operator = None
self.operand = StringVar()
self.result = 0
Label(master,text = "Calculator").grid(row = 0, column=0, columnspan=2)
UserInputEntry = master.register(self.operandValid)
Entry(master, validate="key", validatecommand=(UserInputEntry,'%P'), textvariable=self.operand).grid(row=0, column=0, columnspan=3)
addAction = lambda: self.operand(lambda a, b: a+b)
Button(master,text = "+",command=addAction).grid(row=1, column=3, sticky=W+E)
subAction = lambda: self.operand(lambda a, b: a-b)
Button(master,text = "-",command=subAction).grid(row=2, column=3, sticky=W+E)
mulAction = lambda: self.operand(lambda a, b: a*b)
Button(master,text = "X",command=mulAction).grid(row=3, column=3, sticky=W+E)
divAction = lambda: self.operand(lambda a, b: a/b)
Button(master,text = "/",command=divAction).grid(row=4, column=3, sticky=W+E)
equal = lambda: self.operand(None)
Button(master,text = "=",command=equal).grid(row=4, column=2, sticky=W+E)
enter1 = lambda: self.enterNumber("1")
Button(master,text = "1",command=enter1).grid(row=1, column=0, sticky=W+E)
enter2 = lambda: self.enterNumber("2")
Button(master,text = "2",command=enter2).grid(row=1, column=1, sticky=W+E)
enter3 = lambda: self.enterNumber("3")
Button(master,text = "3",command=enter3).grid(row=1, column=2, sticky=W+E)
enter4 = lambda: self.enterNumber("4")
Button(master,text = "4",command=enter4).grid(row=2, column=0, sticky=W+E)
enter5 = lambda: self.enterNumber("5")
Button(master,text = "5",command=enter5).grid(row=2, column=1, sticky=W+E)
enter6 = lambda: self.enterNumber("6")
Button(master,text = "6",command=enter6).grid(row=2, column=2, sticky=W+E)
enter7 = lambda: self.enterNumber("7")
Button(master,text = "7",command=enter7).grid(row=3, column=0, sticky=W+E)
enter8 = lambda: self.enterNumber("8")
Button(master,text = "8",command=enter8).grid(row=3, column=1, sticky=W+E)
enter9 = lambda: self.enterNumber("9")
Button(master,text = "9",command=enter9).grid(row=3, column=2, sticky=W+E)
enter0 = lambda: self.enterNumber("0")
Button(master,text = "0", command=enter0).grid(row=4, column=0, sticky=W+E)
enterDecimal = lambda: self.enterNumber(".")
Button(master,text=".",command=enterDecimal).grid(row=4, column=1, sticky=W+E)
master.mainloop()
def operation(self, op):
print("The previous operation was {self.operation}")
self.result = self.operator(self.result, float(self.operand))
self.operator = op
def operandValid(self, operand):
try:
operand = float(operand)
return True
except:
return False
def enterNumber(self,character):
#if self.resultDisplayed:
#self.resultDisplayed = False
#self.operand.set("")#reset the Entry for new input
if(self.operandValid(self.operand.get()+character)):
self.operand.set(self.operand.get()+character)
计算器()
addAction = lambda:self.operand(lambda a,b:a + b)TypeError:'StringVar'对象不可调用
那是因为您所做的等同于StringVar()(lambda a, b: a+b)
。您应该将lambada留在里面,self.operand
然后再放其他所有东西。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句