python3.5仿微软计算器程序
本文实例为大家分享了python3.5仿微软计算器的具体代码,供大家参考,具体内容如下
fromtkinterimport* frommathimport* root=Tk() root.title("计算器") root.geometry("1200x260+0+0") defcome(event): event.widget["background"]="orange"#event的widget方法,恩,恩,值得看看 defgo(event): event.widget["background"]="#%02x%02x%02x"%(240,240,240)#实现RGB和十六进制的换算 defnum1(): text.insert(END,1) defnum2(): text.insert(END,2) defnum3(): text.insert(END,3) defnum4(): text.insert(END,4) defnum5(): text.insert(END,5) defnum6(): text.insert(END,6) defnum7(): text.insert(END,7) defnum8(): text.insert(END,8) defnum9(): text.insert(END,9) defnum0(): iftext.get(END)=="/": messagebox.showinfo(title="除数不能为零") else: text.insert(END,0) defdot_it(): text.insert(END,".") defAddnum(): iftext.get(1.0,END): text.insert(END,"+") defminus_num(): iftext.get(1.0,END): text.insert(END,"-") deftimes_num(): iftext.get(1.0,END): text.insert(END,"*") defdiv_num(): iftext.get(1.0,END): text.insert(END,"/") defequal_it():#可以使用text的search方法排除除法和开根号的例外 globallist_power,x,list_log,xylog se=text.get(1.0,END) ifse: if"/"intext.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)) ifcool==0: text_alert.insert(1.0,"被除数不能为零") return else: se=eval(se) text.delete(1.0,END) text.insert(1.0,se) elifxypower==True:#通过设全局变量为哨兵,看函数是否被调用 list_power.append(eval(se)) text.delete(1.0,END) text.insert(1.0,pow(list_power[0],list_power[1])) list_power=[] elifxylog==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) defnegative(): text.insert(END,"-") defSquare_root(): ifeval(text.get(1.0,END))>=0: rootit=sqrt(eval(text.get(1.0,END))) text.delete(1.0,END) text.insert(1.0,rootit) defPer(): iftext.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) defReci_num(): #text.get(1.0,"%s-2c"%END).strip("\n") #iftext.get(1.0,"%s-1c"%END).isdigit(): #iftype(aa)==type(bb)可以用来判断数据类型 #iftype(aa)==type(1) #iftype(aa)==type("我") #iftype(aa)==type(3.14) ifeval(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,"零不能求倒数") defC(): globalmemorylist,list_power,list_log#global的用法 text.delete(1.0,END) text_alert.delete(1.0,END) memorylist=[] list_power=[] list_log=[] defCE(): text.delete(1.0,END) text_alert.delete(1.0,END) defdelete_onechar(): text.delete("%s-1c"%INSERT,INSERT)#字符index的移动 defMc(): globalmemorylist memorylist=[] defMs(): globalmemorylist memorylist.append(eval(text.get(1.0,END))) text.delete(1.0,END) defM_plus(): globalmemorylist globalm_plus m_plus=True memorylist.append(eval(text.get(1.0,END))) text.delete(1.0,END) returnTrue defM_minus(): globalmemorylist globalm_minus m_minus=True memorylist.append(eval(text.get(1.0,END))) text.delete(1.0,END) returnTrue defMr(): globalmemorylist globalm_plus globalm_minus text.delete(1.0,END) ifm_plus==True: sum1=0 foriinrange(len(memorylist)): sum1=sum1+memorylist[i] memorylist=[] memorylist.append(sum1) text.insert(1.0,sum1) elifm_minus==True: difference=0 foriinrange(len(memorylist)): difference=memorylist[i]-difference difference=-difference memorylist.append(difference) text.insert(1.0,difference) defangle_radio(): text.delete(1.0,END) globalangle_is angle_is=True defradium_radio(): text.delete(1.0,END) globalradium_is radium_is=True defangle_choice(): globalx ifangle_is==True: x=pi*eval(text.get(1.0,END))/180 ifradium_is==True: x=eval(text.get(1.0,END)) defcircle_ratio(): text.insert(END,pi) defsin_x(): globalx angle_choice() text.delete(1.0,END) text.insert(1.0,sin(x)) defcos_x(): globalx angle_choice() text.delete(1.0,END) text.insert(1.0,cos(x)) deftan_x(): angle_choice() ifx==90orx==pi/2: text_alert.insert(1.0,"正切角度不能为90度或π/2弧度") return else: text.delete(1.0,END) text.insert(1.0,tan(x)) defsquare_it(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,pow(temp,2)) defx_ypower(): globallist_power,x,xypower xypower=True x=eval(text.get(1.0,END)) list_power.append(x) text.delete(1.0,END) deftri_power(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,pow(temp,3)) defBracket_left(): text.insert(END,"(") defBracket_right(): text.insert(END,")") defnature_log(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,log1p(temp)) defdeci_log(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,log10(temp)) defbina_log(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,log2(temp)) defy_based_on_x_log(): globallist_log,x,xylog xylog=True x=eval(text.get(1.0,END)) list_log.append(x) text.delete(1.0,END) defnatur_const(): text.insert(END,e) defanti_sin(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,asin(temp)*180/pi) defanti_cos(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,acos(temp)*180/pi) defanti_tan(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,atan(temp)*180/pi) defsqrt_num(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,sqrt(temp)) deftri_root(): temp=eval(text.get(1.0,END)) text.delete(1.0,END) text.insert(1.0,pow(temp,1/3)) defstandard(): 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) defsci(): 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计算器进行学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。