本文实例为大家分享了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程序设计有所帮助。