-7

我在网上找到了这个计算器代码。

我想添加一些函数,比如 pow() 但它返回一个错误。

错误:

按钮(powF,左,'pow',lambda w=display: w.set(w.pow()))

AttributeError:StringVar 实例没有属性“pow”


from Tkinter import * 
import math

def frame(root, side):
   w = Frame(root)
   w.pack(side=side, expand=YES, fill=BOTH) 
   return w

def button(root, side, text, command=None):
   w = Button(root, text=text, command=command)
   w.pack(side=side, expand=YES, fill=BOTH)
   return w

class Calculator(Frame):
   def __init__(self):
       Frame.__init__(self)
       self.option_add('*Font', 'Verdana 20 bold') 
       self.pack(expand=YES, fill=BOTH)  
       self.master.title('tk') 
       self.master.iconname("calcu1ator") 

       display = StringVar()
     Entry(self,relief=SUNKEN,textvariable=display).pack(side=TOP,expand=YES,fill=BOTH)
   
       for key in ("123", "456", "789", "-0."):
           keyF = frame(self, TOP)
       
           for char in key:
               button(keyF, LEFT, char,lambda w=display, c=char: w.set(w.get() + c))
           
       opsF = frame(self, TOP)
   
       for char in "+-*/=":
           if char == '=':
               btn = button(opsF, LEFT, char)
               btn.bind('<ButtonRelease-1>',lambda e, s=self, w=display: s.calc(w), '+')
           else:
               btn = button(opsF, LEFT, char,lambda w=display, s=' %s '%char:w.set(w.get()+s))

       clearF = frame(self, BOTTOM)
       button(clearF, LEFT, 'Clr', lambda w=display: w.set(''))
   
       #powF = frame(self, BOTTOM)
       #button(powF, LEFT, 'pow', lambda w=display: pow(w,2))

   def calc(self, display):
       try:
           display.set(eval(display.get()))
       except:
           display.set("ERROR")

if __name__ == '__main__':
   Calculator().mainloop() 
4

1 回答 1

1

您不能将displayas 参数提供给pow函数,它需要一个数字。并且不要忘记设置显示。

   powF = frame(self, BOTTOM)
   button(powF, LEFT, 'pow', lambda w=display: w.set(pow(float(w.get()),2)))
于 2013-01-03T14:52:20.057 回答