【发布时间】:2020-12-11 14:28:01
【问题描述】:
我正在尝试创建这个 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' 对象不可调用
【问题讨论】:
-
self.operand = StringVar(末尾没有括号)? -
括号必须在 init 方法中但不在类中,
标签: python tkinter calculator