首页 > 编程 > Python > 正文

python3.5仿微软计算器程序

2019-11-25 16:43:44
字体:
来源:转载
供稿:网友

本文实例为大家分享了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 Truedef M_minus():  global memorylist  global m_minus  m_minus =True  memorylist.append(eval(text.get(1.0,END)))  text.delete(1.0,END)  return Truedef 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 =Truedef 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表