python模拟计算器程序代码_python3.5仿微软计算器程序

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值