本文实例为大家分享了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()

更多计算器功能实现,请点击专题: 计算器功能汇总 进行学习

关于Android计算器功能的实现,查看专题:Android计算器 进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?