이 GUI 계산기를 만들려고하는데 'StringVar'개체를 호출 할 수없는 것 같습니다. 문제는-, *, /, = 등과 같은 다른 연산자에서도 지속됩니다. (저는 코딩과 파이썬의 세계에 신선합니다),
tkinter에서 import Tk, Label, StringVar, Entry, Button, W, E
클래스 계산기 : 피연산자 : StringVar 연산자 : 없음 결과 : float
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'object is not callable
그것은 당신이 StringVar()(lambda a, b: a+b)
. 람바다는 안에 self.operand
두고 나머지는 그대로두면됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다