本文实例为大家分享了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(\"\",come) MC.bind(\" \",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(\" \",come) MR.bind(\" \",go) MS = Button(root,text =\"MS\",width =10,command =Ms) MS.grid(row=2,column =2,sticky =W,padx =1) MS.bind(\" \",come) MS.bind(\" \",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(\" \",come) M_ADD.bind(\" \",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(\" \",come) M_Minus.bind(\" \",go) DEL = Button(root,text =\"→\",width =10,command =delete_onechar) DEL.grid(row=3,column =0,sticky =W,padx =1) DEL.bind(\" \",come) DEL.bind(\" \",go) CEbtn = Button(root,text =\"CE\",width =10,command =CE) CEbtn.grid(row=3,column =1,sticky =W,padx =1) CEbtn.bind(\" \",come) CEbtn.bind(\" \",go) Cbtn = Button(root,text =\"C\",width =10,command =C) Cbtn.grid(row=3,column =2,sticky =W,padx =1) Cbtn.bind(\" \",come) Cbtn.bind(\" \",go) negativ = Button(root,text =\"负号 - \",width =10,command = negative) negativ.grid(row=3,column =3,sticky =W,padx =1) negativ.bind(\" \",come) negativ.bind(\" \",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(\" \",come) sqr_root.bind(\" \",go) btn7 = Button(root,text =7,width =10,command = num7) btn7.grid(row=4,column =0,sticky =W,padx =1) btn7.bind(\" \",come) btn7.bind(\" \",go) btn8 = Button(root,text =8,width =10,command = num8) btn8.grid(row=4,column =1,sticky =W,padx =1) btn8.bind(\" \",come) btn8.bind(\" \",go) btn9 = Button(root,text =9,width =10,command = num9) btn9.grid(row=4,column =2,sticky =W,padx =1) btn9.bind(\" \",come) btn9.bind(\" \",go) div = Button(root,text =\"除法 /\",width =10,command = div_num) div.grid(row=4,column =3,sticky =W,padx =1) div.bind(\" \",come) div.bind(\" \",go) per = Button(root,text =\"百分之 %\",width =10,command =Per) per.grid(row=4,column =4,sticky =W,padx =1) per.bind(\" \",come) per.bind(\" \",go) btn4 = Button(root,text =4,width =10,command = num4) btn4.grid(row=5,column =0,sticky =W,padx =1) btn4.bind(\" \",come) btn4.bind(\" \",go) btn5 = Button(root,text =5,width =10,command = num5) btn5.grid(row=5,column =1,sticky =W,padx =1) btn5.bind(\" \",come) btn5.bind(\" \",go) btn6 = Button(root,text =6,width =10,command = num6) btn6.grid(row=5,column =2,sticky =W,padx =1) btn6.bind(\" \",come) btn6.bind(\" \",go) times = Button(root,text =\"乘法 ×\",width =10,command = times_num) times.grid(row=5,column =3,sticky =W,padx =1) times.bind(\" \",come) times.bind(\" \",go) reciprocal = Button(root,text =\"倒数 1/x\",width =10,command =Reci_num) reciprocal.grid(row=5,column =4,sticky =W,padx =1) reciprocal.bind(\" \",come) reciprocal.bind(\" \",go) btn1 = Button(root,text =1,width =10,command = num1) btn1.grid(row=6,column =0,sticky =W,padx =1) btn1.bind(\" \",come) btn1.bind(\" \",go) btn2 = Button(root,text =2,width =10,command = num2) btn2.grid(row=6,column =1,sticky =W,padx =1) btn2.bind(\" \",come) btn2.bind(\" \",go) btn3 = Button(root,text =3,width =10,command = num3) btn3.grid(row=6,column =2,sticky =W,padx =1) btn3.bind(\" \",come) btn3.bind(\" \",go) minus = Button(root,text =\"减 - \",width =10,command =minus_num ) minus.grid(row=6,column =3,sticky =W,padx =1) minus.bind(\" \",come) minus.bind(\" \",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(\" \",come) equal.bind(\" \",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(\" \",come) btn0.bind(\" \",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(\" \",come) dot.bind(\" \",go) add = Button(root,text =\"加 +\",width =10,command = Addnum) add.grid(row=7,column =3,sticky =W,padx =1) add.bind(\" \",come) add.bind(\" \",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(\" \",come) sinaa.bind(\" \",go) cosaa = Button(root,text = \"COS(x)\",width =18,command = cos_x) cosaa.grid(row =1,column =7) cosaa.bind(\" \",come) cosaa.bind(\" \",go) tanaa = Button(root,text = \"tan(x)\",width =18,command =tan_x) tanaa.grid(row = 1,column =8) tanaa.bind(\" \",come) tanaa.bind(\" \",go) x_square = Button(root,text = \"x的平方\",width =18,command = square_it) x_square.grid(row =2,column =6) x_square.bind(\" \",come) x_square.bind(\" \",go) X_Ytimes = Button(root,text = \"x的Y次方\",width =18,command =x_ypower) X_Ytimes.grid(row = 2,column =7) X_Ytimes.bind(\" \",come) X_Ytimes.bind(\" \",go) X_tri= Button(root,text = \"x的三次方\",width =18,command = tri_power) X_tri.grid(row = 2,column =8) X_tri.bind(\" \",come) X_tri.bind(\" \",go) leftbra = Button(root,text = \"左括号 ( \",width =18,command = Bracket_left) leftbra.grid(row = 3,column =6) leftbra.bind(\" \",come) leftbra.bind(\" \",go) rightbra = Button(root,text = \"右括号 )\",width =18,command = Bracket_right) rightbra.grid(row =3,column =7) rightbra.bind(\" \",come) rightbra.bind(\" \",go) natural_logs = Button(root,text = \"自然对数 In(x)\",width =18,command =nature_log) natural_logs.grid(row = 7,column =6) natural_logs.bind(\" \",come) natural_logs.bind(\" \",go) square_root = Button(root,text = \"x的平方根\",width =18,command = sqrt_num) square_root.grid(row =4,column =6) square_root.bind(\" \",come) square_root.bind(\" \",go) X_Yroot = Button(root,text = \"x的Y次方根\",width =18,command = x_ypower) X_Yroot.grid(row = 4,column =7) X_Yroot.bind(\" \",come) X_Yroot.bind(\" \",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(\" \",come) X_tri_root.bind(\" \",go) log10aa = Button(root,text = \"以10为底的对数Logx\",width =18,command =deci_log) log10aa.grid(row = 5,column =6) log10aa.bind(\" \",come) log10aa.bind(\" \",go) log2aa = Button(root,text = \"以2为底的对数Logx\",width =18,command =bina_log) log2aa.grid(row = 5,column =8) log2aa.bind(\" \",come) log2aa.bind(\" \",go) pow10 = Button(root,text = \"以x为底,y为真数的logx\",width =18,command =y_based_on_x_log) pow10.grid(row =5,column =7) pow10.bind(\" \",come) pow10.bind(\" \",go) radio = Button(root,text = \"圆周率 π\",width =18,command =circle_ratio) radio.grid(row = 7,column =7) radio.bind(\" \",come) radio.bind(\" \",go) natur_con = Button(root,text = \"自然常数e\",width =18,command =natur_const) natur_con.grid(row = 7,column =8) natur_con.bind(\" \",come) natur_con.bind(\" \",go) antisin = Button(root,text = \"反三角正弦sin(-1)x\",width =18,height =1,command =anti_sin) antisin.grid(row = 6,column =6) antisin.bind(\" \",come) antisin.bind(\" \",go) anticos = Button(root,text = \"反三角余弦cos(-1)x\",width =18,height =1,command =anti_cos) anticos.grid(row =6,column =7) anticos.bind(\" \",come) anticos.bind(\" \",go) antitan = Button(root,text = \"反三角正切tan(-1)x\",width =18,height =1,command = anti_tan) antitan.grid(row = 6,column =8) antitan.bind(\" \",come) antitan.bind(\" \",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程序设计有所帮助。