python3.5仿微软计算器程序

358次阅读  |  发布于5年以前

本文实例为大家分享了python3.5仿微软计算器的具体代码,供大家参考,具体内容如下


    from tkinter import *
    from math import *
    root = Tk()
    root.title("计算器")
    root.geometry("1200x260+0+0")


    def come(event):
      event.widget["background"]= "orange"#event的widget方法,恩,恩,值得看看
    def go(event):
      event.widget["background"] = "#%02x%02x%02x" % (240,240,240)#实现RGB和十六进制的换算
    def num1():
      text.insert(END,1)
    def num2():
      text.insert(END,2)
    def num3():
      text.insert(END,3)
    def num4():
      text.insert(END,4)
    def num5():
      text.insert(END,5)
    def num6():
      text.insert(END,6)
    def num7():
      text.insert(END,7)
    def num8():
      text.insert(END,8)
    def num9():
      text.insert(END,9)
    def num0():
      if text.get(END) =="/":
        messagebox.showinfo(title ="除数不能为零")
      else:
        text.insert(END,0)
    def dot_it():
      text.insert(END,".")

    def Addnum():
      if text.get(1.0,END):
        text.insert(END,"+")
    def minus_num():
      if text.get(1.0,END):
        text.insert(END,"-")
    def times_num():
      if text.get(1.0,END):
        text.insert(END,"*")
    def div_num():
      if text.get(1.0,END):
        text.insert(END,"/")

    def equal_it():#可以使用text的search方法排除除法和开根号的例外
      global list_power,x,list_log,xylog
      se = text.get(1.0,END)
      if se:
        if "/" in text.get(1.0,END):
          div_pos = text.search("/",1.0,END)
          pos = div_pos.split(".")
          text_row = pos[0]
          text_column = pos[1]
          newpos = "%d.%d" % (int(text_row),int(text_column)+1)
          cool = eval(text.get(newpos,END))
          if cool == 0:
            text_alert.insert(1.0,"被除数不能为零")
            return
          else:
            se = eval(se)
            text.delete(1.0,END)
            text.insert(1.0,se)
        elif xypower==True:#通过设全局变量为哨兵,看函数是否被调用
          list_power.append(eval(se))
          text.delete(1.0,END)
          text.insert(1.0,pow(list_power[0],list_power[1]))
          list_power = []
        elif xylog ==True:
          list_log.append(eval(se))
          text.delete(1.0,END)
          text.insert(1.0,log(list_log[1],list_log[0]))
          list_log = []


        else:
          se = eval(se)
          text.delete(1.0,END)
          text.insert(1.0,se)
      else:
        text.delete(1.0,END)
    def negative():
      text.insert(END,"-")
    def Square_root():
      if eval(text.get(1.0,END))>=0:
        rootit =sqrt(eval(text.get(1.0,END)))
        text.delete(1.0,END)
        text.insert(1.0,rootit)
    def Per():
      if text.get(1.0,END):
        num = eval(text.get(1.0,END))
        text.insert(END,"%")
        newnum = num*0.01
        text.delete(1.0,END)
        text.insert(1.0,newnum)

    def Reci_num():
      #text.get(1.0,"%s-2c" % END).strip("\n")
      #if text.get(1.0,"%s-1c" % END).isdigit():
        # if type(aa)==type(bb) 可以用来判断数据类型
        # if type(aa)==type(1)
        #if type(aa)==type("我")
        #if type(aa)==type(3.14)
      if eval(text.get(1.0,END))!=0:
        num = eval(text.get(1.0,END).strip("\n"))
        num = 1/num
        text.delete(1.0,END)
        text.insert(1.0,num)
      else:
          text_alert.insert(1.0,"零不能求倒数")

    def C():
      global memorylist,list_power,list_log# global的用法
      text.delete(1.0,END)
      text_alert.delete(1.0,END)
      memorylist = []
      list_power = []
      list_log =[]

    def CE():
      text.delete(1.0,END)
      text_alert.delete(1.0,END)
    def delete_onechar():
      text.delete("%s-1c" % INSERT,INSERT)#字符index的移动
    def Mc():
      global memorylist
      memorylist = []
    def Ms():
      global memorylist
      memorylist.append(eval(text.get(1.0,END)))
      text.delete(1.0,END)
    def M_plus():
      global memorylist
      global m_plus
      m_plus = True
      memorylist.append(eval(text.get(1.0,END)))
      text.delete(1.0,END)
      return True
    def M_minus():
      global memorylist
      global m_minus
      m_minus =True
      memorylist.append(eval(text.get(1.0,END)))
      text.delete(1.0,END)
      return True
    def Mr():
      global memorylist
      global m_plus
      global m_minus
      text.delete(1.0,END)
      if m_plus == True:
        sum1 =0
        for i in range(len(memorylist)):
          sum1 = sum1 + memorylist[i]
        memorylist =[]
        memorylist.append(sum1)
        text.insert(1.0,sum1)
      elif m_minus == True:
        difference = 0
        for i in range(len(memorylist)):
          difference = memorylist[i]-difference
        difference = - difference
        memorylist.append(difference)
        text.insert(1.0,difference)
    def angle_radio():
      text.delete(1.0,END)
      global angle_is
      angle_is =True

    def radium_radio():
      text.delete(1.0,END)
      global radium_is
      radium_is =True
    def angle_choice():
      global x
      if angle_is == True:
        x = pi*eval(text.get(1.0,END))/180
      if radium_is == True:
        x = eval(text.get(1.0,END))
    def circle_ratio():
      text.insert(END,pi)
    def sin_x():
      global x
      angle_choice()
      text.delete(1.0,END)
      text.insert(1.0,sin(x))

    def cos_x():
      global x
      angle_choice()
      text.delete(1.0,END)
      text.insert(1.0,cos(x))

    def tan_x():
      angle_choice()
      if x == 90 or x == pi/2:
        text_alert.insert(1.0,"正切角度不能为90度或π/2弧度")
        return
      else:
        text.delete(1.0,END)
        text.insert(1.0,tan(x))

    def square_it():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,pow(temp,2))
    def x_ypower():
      global list_power,x,xypower
      xypower =True
      x = eval(text.get(1.0,END))
      list_power.append(x)
      text.delete(1.0,END)
    def tri_power():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,pow(temp,3))
    def Bracket_left():
      text.insert(END,"(")
    def Bracket_right():
      text.insert(END,")")
    def nature_log():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,log1p(temp))
    def deci_log():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,log10(temp))
    def bina_log():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,log2(temp))
    def y_based_on_x_log():
      global list_log,x,xylog
      xylog =True
      x = eval(text.get(1.0,END))
      list_log.append(x)
      text.delete(1.0,END)
    def natur_const():
      text.insert(END,e)
    def anti_sin():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,asin(temp)*180/pi)
    def anti_cos():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,acos(temp)*180/pi)
    def anti_tan():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,atan(temp)*180/pi)
    def sqrt_num():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,sqrt(temp))
    def tri_root():
      temp = eval(text.get(1.0,END))
      text.delete(1.0,END)
      text.insert(1.0,pow(temp,1/3))

    def standard():
      MC = Button(root,text ="MC",width =10,command = Mc)
      MC.bind("<Enter>",come)
      MC.bind("<Leave>",go)
      MC.grid(row=2,column =0,sticky =W,padx =1)
      MR = Button(root,text ="MR",width =10,command = Mr)
      MR.grid(row=2,column =1,stick = W,padx =1)
      MR.bind("<Enter>",come)
      MR.bind("<Leave>",go)
      MS = Button(root,text ="MS",width =10,command =Ms)
      MS.grid(row=2,column =2,sticky =W,padx =1)
      MS.bind("<Enter>",come)
      MS.bind("<Leave>",go)
      M_ADD = Button(root,text ="M+",width =10,command =M_plus)
      M_ADD.grid(row=2,column =3,sticky =W,padx =1)
      M_ADD.bind("<Enter>",come)
      M_ADD.bind("<Leave>",go)
      M_ADD.bind("<>")
      M_Minus = Button(root,text ="M-",width =10,command =M_minus)
      M_Minus.grid(row=2,column =4,sticky =W,padx =1)
      M_Minus.bind("<Enter>",come)
      M_Minus.bind("<Leave>",go)

      DEL = Button(root,text ="->",width =10,command =delete_onechar)
      DEL.grid(row=3,column =0,sticky =W,padx =1)
      DEL.bind("<Enter>",come)
      DEL.bind("<Leave>",go)
      CEbtn = Button(root,text ="CE",width =10,command =CE)
      CEbtn.grid(row=3,column =1,sticky =W,padx =1)
      CEbtn.bind("<Enter>",come)
      CEbtn.bind("<Leave>",go)
      Cbtn = Button(root,text ="C",width =10,command =C)
      Cbtn.grid(row=3,column =2,sticky =W,padx =1)
      Cbtn.bind("<Enter>",come)
      Cbtn.bind("<Leave>",go)
      negativ = Button(root,text ="负号 - ",width =10,command = negative)
      negativ.grid(row=3,column =3,sticky =W,padx =1)
      negativ.bind("<Enter>",come)
      negativ.bind("<Leave>",go)
      sqr_root = Button(root,text ="平方根√",width =10,command =Square_root )
      sqr_root.grid(row =3,column =4,sticky =W,padx =1)
      sqr_root.bind("<Enter>",come)
      sqr_root.bind("<Leave>",go)


      btn7 = Button(root,text =7,width =10,command = num7)
      btn7.grid(row=4,column =0,sticky =W,padx =1)
      btn7.bind("<Enter>",come)
      btn7.bind("<Leave>",go)
      btn8 = Button(root,text =8,width =10,command = num8)
      btn8.grid(row=4,column =1,sticky =W,padx =1)
      btn8.bind("<Enter>",come)
      btn8.bind("<Leave>",go)
      btn9 = Button(root,text =9,width =10,command = num9)
      btn9.grid(row=4,column =2,sticky =W,padx =1)
      btn9.bind("<Enter>",come)
      btn9.bind("<Leave>",go)
      div = Button(root,text ="除法 /",width =10,command = div_num)
      div.grid(row=4,column =3,sticky =W,padx =1)
      div.bind("<Enter>",come)
      div.bind("<Leave>",go)
      per = Button(root,text ="百分之 %",width =10,command =Per)
      per.grid(row=4,column =4,sticky =W,padx =1)
      per.bind("<Enter>",come)
      per.bind("<Leave>",go)

      btn4 = Button(root,text =4,width =10,command = num4)
      btn4.grid(row=5,column =0,sticky =W,padx =1)
      btn4.bind("<Enter>",come)
      btn4.bind("<Leave>",go)
      btn5 = Button(root,text =5,width =10,command = num5)
      btn5.grid(row=5,column =1,sticky =W,padx =1)
      btn5.bind("<Enter>",come)
      btn5.bind("<Leave>",go)
      btn6 = Button(root,text =6,width =10,command = num6)
      btn6.grid(row=5,column =2,sticky =W,padx =1)
      btn6.bind("<Enter>",come)
      btn6.bind("<Leave>",go)
      times = Button(root,text ="乘法 ×",width =10,command = times_num)
      times.grid(row=5,column =3,sticky =W,padx =1)
      times.bind("<Enter>",come)
      times.bind("<Leave>",go)
      reciprocal = Button(root,text ="倒数 1/x",width =10,command =Reci_num)
      reciprocal.grid(row=5,column =4,sticky =W,padx =1)
      reciprocal.bind("<Enter>",come)
      reciprocal.bind("<Leave>",go)


      btn1 = Button(root,text =1,width =10,command = num1)
      btn1.grid(row=6,column =0,sticky =W,padx =1)
      btn1.bind("<Enter>",come)
      btn1.bind("<Leave>",go)
      btn2 = Button(root,text =2,width =10,command = num2)
      btn2.grid(row=6,column =1,sticky =W,padx =1)
      btn2.bind("<Enter>",come)
      btn2.bind("<Leave>",go)
      btn3 = Button(root,text =3,width =10,command = num3)
      btn3.grid(row=6,column =2,sticky =W,padx =1)
      btn3.bind("<Enter>",come)
      btn3.bind("<Leave>",go)
      minus = Button(root,text ="减 - ",width =10,command =minus_num )
      minus.grid(row=6,column =3,sticky =W,padx =1)
      minus.bind("<Enter>",come)
      minus.bind("<Leave>",go)
      equal = Button(root,text ="=",width =10,height =3,command = equal_it)
      equal.grid(row=6,column =4,sticky =W,padx =1,rowspan =2)
      equal.bind("<Enter>",come)
      equal.bind("<Leave>",go)

      btn0 = Button(root,text =0,width =22,height =1,command = num0)
      btn0.grid(row=7,column =0,sticky =W,padx =1,columnspan =2)
      btn0.bind("<Enter>",come)
      btn0.bind("<Leave>",go)
      dot = Button(root,text =".",width =7,font =("Times","14"),height =1,command =dot_it)
      dot.grid(row=7,column =2,sticky =W,padx =1)
      dot.bind("<Enter>",come)
      dot.bind("<Leave>",go)
      add = Button(root,text ="加 +",width =10,command = Addnum)
      add.grid(row=7,column =3,sticky =W,padx =1)
      add.bind("<Enter>",come)
      add.bind("<Leave>",go)

    def sci():
      v =IntVar()
      angle = Radiobutton(root,text = "角度",variable =v,value =1,command =angle_radio)
      angle.grid(row=0,column=6)
      radium = Radiobutton(root,text = "弧度",variable =v,value =2,command =radium_radio )
      radium.grid(row=0,column=7)

      sinaa = Button(root,text = "Sin(x)",width =18,command = sin_x)
      sinaa.grid(row = 1,column =6)
      sinaa.bind("<Enter>",come)
      sinaa.bind("<Leave>",go)
      cosaa = Button(root,text = "COS(x)",width =18,command = cos_x)
      cosaa.grid(row =1,column =7)
      cosaa.bind("<Enter>",come)
      cosaa.bind("<Leave>",go)
      tanaa = Button(root,text = "tan(x)",width =18,command =tan_x)
      tanaa.grid(row = 1,column =8)
      tanaa.bind("<Enter>",come)
      tanaa.bind("<Leave>",go)
      x_square = Button(root,text = "x的平方",width =18,command = square_it)
      x_square.grid(row =2,column =6)
      x_square.bind("<Enter>",come)
      x_square.bind("<Leave>",go)
      X_Ytimes = Button(root,text = "x的Y次方",width =18,command =x_ypower)
      X_Ytimes.grid(row = 2,column =7)
      X_Ytimes.bind("<Enter>",come)
      X_Ytimes.bind("<Leave>",go)
      X_tri= Button(root,text = "x的三次方",width =18,command = tri_power)
      X_tri.grid(row = 2,column =8)
      X_tri.bind("<Enter>",come)
      X_tri.bind("<Leave>",go)

      leftbra = Button(root,text = "左括号 ( ",width =18,command = Bracket_left)
      leftbra.grid(row = 3,column =6)
      leftbra.bind("<Enter>",come)
      leftbra.bind("<Leave>",go)
      rightbra = Button(root,text = "右括号  )",width =18,command = Bracket_right)
      rightbra.grid(row =3,column =7)
      rightbra.bind("<Enter>",come)
      rightbra.bind("<Leave>",go)
      natural_logs = Button(root,text = "自然对数 In(x)",width =18,command =nature_log)
      natural_logs.grid(row = 7,column =6)
      natural_logs.bind("<Enter>",come)
      natural_logs.bind("<Leave>",go)
      square_root = Button(root,text = "x的平方根",width =18,command = sqrt_num)
      square_root.grid(row =4,column =6)
      square_root.bind("<Enter>",come)
      square_root.bind("<Leave>",go)
      X_Yroot = Button(root,text = "x的Y次方根",width =18,command = x_ypower)
      X_Yroot.grid(row = 4,column =7)
      X_Yroot.bind("<Enter>",come)
      X_Yroot.bind("<Leave>",go)
      X_tri_root = Button(root,text = "x的三次方根",width =18,command = tri_root)
      X_tri_root.grid(row = 4,column =8)
      X_tri_root.bind("<Enter>",come)
      X_tri_root.bind("<Leave>",go)

      log10aa = Button(root,text = "以10为底的对数Logx",width =18,command =deci_log)
      log10aa.grid(row = 5,column =6)
      log10aa.bind("<Enter>",come)
      log10aa.bind("<Leave>",go)
      log2aa = Button(root,text = "以2为底的对数Logx",width =18,command =bina_log)
      log2aa.grid(row = 5,column =8)
      log2aa.bind("<Enter>",come)
      log2aa.bind("<Leave>",go)
      pow10 = Button(root,text = "以x为底,y为真数的logx",width =18,command =y_based_on_x_log)
      pow10.grid(row =5,column =7)
      pow10.bind("<Enter>",come)
      pow10.bind("<Leave>",go)
      radio = Button(root,text = "圆周率 π",width =18,command =circle_ratio)
      radio.grid(row = 7,column =7)
      radio.bind("<Enter>",come)
      radio.bind("<Leave>",go)
      natur_con = Button(root,text = "自然常数e",width =18,command =natur_const)
      natur_con.grid(row = 7,column =8)
      natur_con.bind("<Enter>",come)
      natur_con.bind("<Leave>",go)

      antisin = Button(root,text = "反三角正弦sin(-1)x",width =18,height =1,command =anti_sin)
      antisin.grid(row = 6,column =6)
      antisin.bind("<Enter>",come)
      antisin.bind("<Leave>",go)
      anticos = Button(root,text = "反三角余弦cos(-1)x",width =18,height =1,command =anti_cos)
      anticos.grid(row =6,column =7)
      anticos.bind("<Enter>",come)
      anticos.bind("<Leave>",go)
      antitan = Button(root,text = "反三角正切tan(-1)x",width =18,height =1,command = anti_tan)
      antitan.grid(row = 6,column =8)
      antitan.bind("<Enter>",come)
      antitan.bind("<Leave>",go)

    ###################
    if __name__ == "__main__":
      ################################菜单设计
      standard_it =True
      sci_it = False
      static_it = False
      code_it = False
      memorylist = []
      m_plus = False
      m_minus = False
      angle_is = False
      radium_is = False
      x =0
      list_power = []
      list_log =[]
      xypower = False
      xylog = False
      text = Text(root,height =1,font = ("Times","20"),width =31,fg = "#%02x%02x%02x" % (46,150,67),bd =0)
      text.grid(row = 0,column =0,columnspan =6)
      text_alert = Text(root,height=1,width =31,fg = "red",font = ("Times","20"),bd = 0)
      text_alert.grid(row =1,column =0,columnspan =6)

      menubar = Menu(root)
      mode_menu = Menu(menubar,tearoff= 0)
      v_mode = IntVar()
      mode_menu.add_radiobutton(label = "标准型",variable = v_mode,value =0,command =standard)
      mode_menu.add_radiobutton(label = "科学型",variable = v_mode,value =1,command = sci)
      mode_menu.add_radiobutton(label = "程序员型",variable =v_mode,value =2)
      mode_menu.add_radiobutton(label = "统计型",variable = v_mode,value =3)

      mode_menu.insert_separator(7)
      v_his_math = IntVar()
      mode_menu.add_radiobutton(label = "历史记录",variable = v_his_math,value =0)
      mode_menu.add_radiobutton(label = "数字分组",variable = v_his_math,value =1)
      menubar.add_cascade(label = "查看",menu = mode_menu)

      mode_menu.insert_separator(11)
      v_transform = IntVar()
      mode_menu.add_radiobutton(label = "单位转换",variable =v_transform,value =1)

      edit = Menu(menubar)
      edit.add_command(label = "复制")
      edit.add_command(label = "黏贴")
      menubar.add_cascade(label = "编辑",menu = edit)

      helpm = Menu(menubar)
      helpm.add_command(label = "使用说明")
      helpm.add_command(label = "版本为1.0")
      menubar.add_cascade(label = "帮助",menu = helpm)
      root.config(menu = menubar)#有这句菜单栏才能正常工作
    #########################################窗体设计

      standard()

      sci()
      root.mainloop()

以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8