蟒蛇计算器

时间:2013-01-03 13:56:51

标签: python

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

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

错误:

  

按钮(powF,LEFT,'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() 

1 个答案:

答案 0 :(得分:1)

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

   powF = frame(self, BOTTOM)
   button(powF, LEFT, 'pow', lambda w=display: w.set(pow(float(w.get()),2)))