python计算器

python计算器,python,Python,我在网上找到了这个计算器代码 我想添加一些函数,比如pow(),但它返回一个错误 错误: 按钮(powF,左侧,“pow”,lambda w=显示:w.set(w.pow()) AttributeError:StringVar实例没有属性“pow” 从Tkinter导入* 输入数学 def机架(根部、侧面): w=帧(根) w、 包装(侧面=侧面,展开=是,填充=两者) 返回w def按钮(根、侧、文本、命令=无): w=按钮(根,文本=文本,命令=命令) w、 包装(侧面=侧面,展开=是,填

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

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

错误:

按钮(powF,左侧,“pow”,lambda w=显示:w.set(w.pow())

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


从Tkinter导入*
输入数学
def机架(根部、侧面):
w=帧(根)
w、 包装(侧面=侧面,展开=是,填充=两者)
返回w
def按钮(根、侧、文本、命令=无):
w=按钮(根,文本=文本,命令=命令)
w、 包装(侧面=侧面,展开=是,填充=两者)
返回w
类计算器(框架):
定义初始化(自):
帧。\uuuu初始化\uuuuu(自)
self.option_add('*Font',Verdana 20粗体')
self.pack(扩展=是,填充=两者)
self.master.title('tk'))
自我。主人。我的名字(“计算器”)
display=StringVar()
条目(self,relief=凹陷,textvariable=显示)。pack(side=顶部,expand=是,fill=两者)
对于输入(“123”、“456”、“789”和“-0”):
keyF=帧(自,顶部)
对于键中的字符:
按钮(keyF,LEFT,char,lambda w=display,c=char:w.set(w.get()+c))
opsF=帧(自身,顶部)
对于“+-*/=”中的字符:
如果char=='=':
btn=按钮(opsF,左,字符)
btn.bind(“”,lambda e,s=self,w=display:s.calc(w),“+”)
其他:
btn=按钮(opsF,左,char,lambda w=display,s='%s'%char:w.set(w.get()+s))
clearF=框架(自底)
按钮(clearF,左侧,“Clr”,lambda w=显示:w.set(“”))
#powF=框架(自身,底部)
#按钮(powF,左侧,“pow”,lambda w=显示:pow(w,2))
def计算(自身,显示):
尝试:
display.set(eval(display.get()))
除:
display.set(“错误”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
计算器().mainloop()

您不能将
显示作为
pow
函数的参数,它需要一个数字。别忘了设置显示器

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

怎么了?帮助我们,帮助你。不要让别人读你的代码来找出你做错了什么。无论你从哪里得到这些代码,都是不好的,使用
eval
是不好的。曾经。@InbarRose--
eval
的存在是有原因的。Guido从未放弃删除/更改语言以删除不必要的内容——因此,Guido至少仍然相信
eval
在语言中占有一席之地(我也这么认为)。但是,您绝对正确,不应该轻率地使用它——特别是如果您计划与他人共享代码。
   powF = frame(self, BOTTOM)
   button(powF, LEFT, 'pow', lambda w=display: w.set(pow(float(w.get()),2)))