【问题标题】:need help creating tkinter calculator, button that takes 2 arguments需要帮助创建 tkinter 计算器,需要 2 个参数的按钮
【发布时间】:2018-01-19 03:49:25
【问题描述】:
  #-*-coding: utf-8-*-
from Tkinter import *

import math


class calc:
 def getandreplace(self):
  """replace x with * and ÷ with /"""




 self.expression = self.e.get()
  self.newtext=self.expression.replace(self.newdiv,'/')
  self.newtext=self.newtext.replace('x','*')

 def equals(self):
  """when the equal button is pressed"""

  self.getandreplace()
  try: 
   self.value= eval(self.newtext) #evaluate the expression using the eval function
  except SyntaxError or NameErrror:
   self.e.delete(0,END)
   self.e.insert(0,'Invalid Input!')
  else:
   self.e.delete(0,END)
   self.e.insert(0,self.value)

 def squareroot(self):
  """squareroot method"""

  self.getandreplace()
  try: 
   self.value= eval(self.newtext) #evaluate the expression using the eval function
  except SyntaxError or NameErrror:
   self.e.delete(0,END)
   self.e.insert(0,'Invalid Input!')
  else:
   self.sqrtval=math.sqrt(self.value)
   self.e.delete(0,END)
   self.e.insert(0,self.sqrtval)



 def volumesphere(self): 
  self.getandreplace()
  try: 
   self.value= eval(self.newtext) 
  except SyntaxError or NameErrror:
   self.e.delete(0,END)
   self.e.insert(0,'Invalid Input!')
  else:
    self.totval=(4*math.pi*(self.value**3))/3
    self.e.delete(0,END)
    self.e.insert(0,self.totval) 
   # new linee

 def sphere(self): 
  self.getandreplace()
  try: 
   self.value= eval(self.newtext) 
  except SyntaxError or NameErrror:
   self.e.delete(0,END)
   self.e.insert(0,'Invalid Input!')
  else:
    self.lval=(4*math.pi*math.pow(self.value,2))
    self.e.delete(0,END)
    self.e.insert(0,self.lval)



 def sa(self):
  self.getandreplace()
  try: 
   self.value= eval(self.newtext) 
  except SyntaxError or NameErrror:
   self.e.delete(0,END)
   self.e.insert(0,'Invalid Input!')
  else:
   float(self.value)
   l = (math.sqrt(math.pow(self.value,2)+(math.pow(self,2))))
   self.saval = ( math.pi*self*l)+(math.pi*(math.pow(self,2)))
   self.e.delete(0,END)
   self.e.insert(0,self.saval)




 def square(self):
  """square method"""

  self.getandreplace()
  try: 
   self.value= eval(self.newtext) #evaluate the expression using the eval function
  except SyntaxError or NameErrror:
   self.e.delete(0,END)
   self.e.insert(0,'Invalid Input!')
  else:
   self.sqval=math.pow(self.value,2)
   self.e.delete(0,END)
   self.e.insert(0,self.sqval)

 def clearall(self):
  """when clear button is pressed,clears the text input area"""
  self.e.delete(0,END)

 def clear1(self):
  self.txt=self.e.get()[:-1]
  self.e.delete(0,END)
  self.e.insert(0,self.txt)

 def action(self,argi): 
  """pressed button's value is inserted into the end of the text area"""
  self.e.insert(END,argi)



 def __init__(self,master):
  """Constructor method"""
  master.title('Calulator') 
  master.geometry()
  self.e = Entry(master)
  self.e.grid(row=0,column=0,columnspan=9,pady=6)
  self.e.focus_set() #Sets focus on the input text area

  self.div='÷'
  self.newdiv=self.div.decode('utf-8')





  #Generating Buttons
  Button(master,text="=",width=10,command=lambda:self.equals()).grid(row=4, column=4,columnspan=2) 
  Button(master,text='AC',width=3,command=lambda:self.clearall()).grid(row=1, column=4)
  Button(master,text='CL',width=3,command=lambda:self.clear1()).grid(row=1, column=5)
  Button(master,text="+",width=3,command=lambda:self.action('+')).grid(row=4, column=3)
  Button(master,text="x",width=3,command=lambda:self.action('x')).grid(row=2, column=3)
  Button(master,text="-",width=3,command=lambda:self.action('-')).grid(row=3, column=3)
  Button(master,text="÷",width=3,command=lambda:self.action(self.newdiv)).grid(row=1, column=3) 
  Button(master,text="%",width=3,command=lambda:self.action('%')).grid(row=4, column=2)
  Button(master,text="7",width=3,command=lambda:self.action('7')).grid(row=1, column=0)
  Button(master,text="8",width=3,command=lambda:self.action(8)).grid(row=1, column=1)
  Button(master,text="9",width=3,command=lambda:self.action(9)).grid(row=1, column=2)
  Button(master,text="4",width=3,command=lambda:self.action(4)).grid(row=2, column=0)
  Button(master,text="5",width=3,command=lambda:self.action(5)).grid(row=2, column=1)
  Button(master,text="6",width=3,command=lambda:self.action(6)).grid(row=2, column=2)
  Button(master,text="1",width=3,command=lambda:self.action(1)).grid(row=3, column=0)
  Button(master,text="2",width=3,command=lambda:self.action(2)).grid(row=3, column=1)
  Button(master,text="3",width=3,command=lambda:self.action(3)).grid(row=3, column=2)
  Button(master,text="0",width=3,command=lambda:self.action(0)).grid(row=4, column=0)
  Button(master,text=".",width=3,command=lambda:self.action('.')).grid(row=4, column=1)
  Button(master,text="(",width=3,command=lambda:self.action('(')).grid(row=2, column=4)
  Button(master,text=")",width=3,command=lambda:self.action(')')).grid(row=2, column=5)
  Button(master,text="√",width=3,command=lambda:self.squareroot()).grid(row=3, column=4)
  Button(master,text="x²",width=3,command=lambda:self.square()).grid(row=3, column=5)
  Button(master,text="VS",width=3,command=lambda:self.volumesphere()).grid(row=3, column=6)
  Button(master,text="SAS",width=3,command=lambda:self.sphere()).grid(row=2, column=6)
  Button(master,text="SAC",width=3,command=lambda:self.sa()).grid(row=1, column=6)


#Main
root = Tk()
obj=calc(root) #object instantiated
root.mainloop()

这与 python 2.7.10 和我需要帮助制作一个在 tkinter 中自动计算圆锥体表面积的按钮,因为它需要 2 个参数。功能 是 def sa(self) 代码“SAC”上的最后一个按钮应该代表圆锥的表面积。仅供参考,我没有制作此代码,只是根据我的需要进行了修改并继续

【问题讨论】:

标签: python tkinter calculator


【解决方案1】:

使用self.eEntry 获取文本,然后使用空格将split() 放入元素中。

def sa(self):
    values = self.e.get().strip().split(' ')

    if len(values) < 2:
        self.e.delete(0,END)
        self.e.insert(0,'Need two values ("r" and "h") separated by space')
    else:
        r = float(values[0])
        h = float(values[1])

        self.saval = math.pi*r*h + math.pi*math.pow(r,2)

        self.e.delete(0,END)
        self.e.insert(0,self.saval)

【讨论】:

  • 啊好的,非常感谢,这清除了很多其他的东西!
猜你喜欢
  • 2021-08-29
  • 2012-10-03
  • 2023-03-13
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多