1 #=================================================================================== 2 import tkinter 3 import math 4 #=================================================================================== 5 root = tkinter.Tk() #创建一个窗体 6 root.minsize(320,440) #大小尺寸 7 root.title('NEO-Karl的计算器') 8 shownum = tkinter.StringVar() 9 shownum.set(0) 10 # =================================================================================== 11 numstrlist=[]#存储数字 符号 12 isjisuan=False#运算标志 13 #================================================================== 14 #数据触发事件 15 #================================================================== 16 def pressnum(num):#按下数字 17 global isjisuan 18 if isjisuan==True: 19 shownum.set('0') 20 isjisuan=False 21 oldnum=shownum.get() 22 if oldnum=='0':#旧数字是否为0 23 shownum.set(num) 24 else: 25 if num =='+/-': 26 if oldnum.startswith('-'): 27 shownum.set(oldnum[1:]) 28 else: 29 shownum.set('-'+oldnum) 30 else: 31 shownum.set(oldnum+num) 32 #================================================================== 33 #该函数主要实现数据加减符号的操作 34 #================================================================== 35 def presssign(sign):#按下加减符号 36 global numsrtlist 37 global isjisuan 38 oldnum=shownum.get() 39 numstrlist.append(oldnum) 40 numstrlist.append(sign) 41 isjisuan=True 42 print(numstrlist) 43 #================================================================== 44 #该函数主要实现计算器的等的操作符 45 #================================================================== 46 def equal(sign): 47 global numstrlist 48 if sign=='=': 49 oldnum =shownum.get() 50 numstrlist.append(oldnum) 51 print(numstrlist) 52 resu1 =''.join(numstrlist) 53 result =eval(resu1) 54 print(result) 55 shownum.set(result) 56 numstrlist.clear() 57 if sign =='1/x': 58 oldnum = shownum.get() 59 result =1/float(oldnum) 60 print(result) 61 shownum.set(result) 62 if sign =='√': 63 oldnum = shownum.get() 64 result = math.sqrt(float(oldnum)) 65 print(result) 66 shownum.set(result) 67 #================================================================== 68 #该函数主要实现的是数据的清空操作 69 #================================================================== 70 def gui0(): #清空数据 71 global numstrlist 72 global isjisuan 73 numstrlist.clear() 74 isjisuan=False 75 shownum.set(0) 76 # =================================================================================== 77 #文本框输入 78 # =================================================================================== 79 label=tkinter.Label(root,textvariable=shownum,bg='gray',font=('宋体',20),anchor='e',bd=5,fg='gold') 80 label.place(x=20,y=10,width=280,height=50) 81 # =================================================================================== 82 #第一行 83 # =================================================================================== 84 btn1 =tkinter.Button(text ='MC',bg='#988',bd=2)#Memory Clear 清除存储器中的数值 85 btn1.place(x=10,y =70,width =50,height=50) 86 btn2 =tkinter.Button(text ='MR',bg='#988',bd=2)#Memory Read 存储器读出 87 btn2.place(x=70,y =70,width =50,height=50) 88 btn3 =tkinter.Button(text ='MS',bg='#988',bd=2)#Memory Save 存入存储器 89 btn3.place(x=130,y =70,width =50,height=50) 90 btn4 =tkinter.Button(text ='M+',bg='#988',bd=2)#Memory Plus 将数值与存储器中的数值相加 91 btn4.place(x=190,y =70,width =50,height=50) 92 btn5 =tkinter.Button(text ='M-',bg='#988',bd=2) 93 btn5.place(x=250,y =70,width =50,height=50) 94 # =================================================================================== 95 #第二行 96 # =================================================================================== 97 btn2_1 =tkinter.Button(text ='del',bg='#988',bd=3) 98 btn2_1.place(x=10,y =130,width =50,height=50) 99 btn2_2 =tkinter.Button(text ='CE',bg='#988',bd=3,command=lambda:gui0())#CE是清除全部数字,但不影响以前的计算 100 btn2_2.place(x=70,y =130,width =50,height=50) 101 btn2_3 =tkinter.Button(text ='C',bg='#988',bd=3,command=lambda:gui0())#C健是重新开始计算,和ESC键是一样的功能 102 btn2_3.place(x=130,y =130,width =50,height=50) 103 btn2_4 =tkinter.Button(text ='+/-',bg='#988',bd=3,command=lambda:pressnum('+/-')) 104 btn2_4.place(x=190,y =130,width =50,height=50) 105 btn2_5 =tkinter.Button(text ='√',bg='#988',bd=3,command=lambda:equal('√'))#--------√开平方 106 btn2_5.place(x=250,y =130,width =50,height=50) 107 # =================================================================================== 108 #第三行 109 # =================================================================================== 110 btn3_1 =tkinter.Button(text ='7',bg='#aaaaaa',bd=3,command=lambda:pressnum('7')) 111 btn3_1.place(x=10,y =190,width =50,height=50,) 112 btn3_2 =tkinter.Button(text ='8',bg='#aaaaaa',bd=3,command=lambda:pressnum('8')) 113 btn3_2.place(x=70,y =190,width =50,height=50) 114 btn3_3 =tkinter.Button(text ='9',bg='#aaaaaa',bd=3,command=lambda:pressnum('9')) 115 btn3_3.place(x=130,y =190,width =50,height=50) 116 btn3_4 =tkinter.Button(text ='/',bg='#708069',command=lambda:presssign('/')) 117 btn3_4.place(x=190,y =190,width =50,height=50) 118 btn3_5 =tkinter.Button(text ='%',bg='#708069',command=lambda:presssign('%')) 119 btn3_5.place(x=250,y =190,width =50,height=50) 120 # =================================================================================== 121 #第四行 122 # =================================================================================== 123 btn4_1 =tkinter.Button(text ='4',bg='#aaaaaa',bd=3,command=lambda:pressnum('4')) 124 btn4_1.place(x=10,y =250,width =50,height=50) 125 btn4_2 =tkinter.Button(text ='5',bg='#aaaaaa',bd=3,command=lambda:pressnum('5')) 126 btn4_2.place(x=70,y =250,width =50,height=50) 127 btn4_3 =tkinter.Button(text ='6',bg='#aaaaaa',bd=3,command=lambda:pressnum('6')) 128 btn4_3.place(x=130,y =250,width =50,height=50) 129 btn4_4 =tkinter.Button(text ='*',bg='#708069',command=lambda:presssign('*')) 130 btn4_4.place(x=190,y =250,width =50,height=50) 131 btn4_5 =tkinter.Button(text ='1/x',bg='#708069',command=lambda:equal('1/x'))#倒数 132 btn4_5.place(x=250,y =250,width =50,height=50) 133 # =================================================================================== 134 #第五行 135 # =================================================================================== 136 btn5_1 =tkinter.Button(text ='1',bg='#aaaaaa',bd=3,command=lambda:pressnum('1')) 137 btn5_1.place(x=10,y =310,width =50,height=50) 138 btn5_2 =tkinter.Button(text ='2',bg='#aaaaaa',bd=3,command=lambda:pressnum('2')) 139 btn5_2.place(x=70,y =310,width =50,height=50) 140 btn5_3 =tkinter.Button(text ='3',bg='#aaaaaa',bd=3,command=lambda:pressnum('3')) 141 btn5_3.place(x=130,y =310,width =50,height=50) 142 btn5_4 =tkinter.Button(text ='-',bg='#708069',command=lambda:presssign('-')) 143 btn5_4.place(x=190,y =310,width =50,height=50) 144 btn5_5 =tkinter.Button(text ='=',bg='#708069',command=lambda:equal('=')) 145 btn5_5.place(x=250,y =310,width =50,height=110) 146 # =================================================================================== 147 #第六行 148 # =================================================================================== 149 btn6_1 =tkinter.Button(text ='0',bg='#aaaaaa',bd=3,command=lambda:pressnum('0')) 150 btn6_1.place(x=10,y =370,width =110,height=50) 151 btn6_3 =tkinter.Button(text ='.',bg='#708069',command=lambda:pressnum('.')) 152 btn6_3.place(x=130,y =370,width =50,height=50) 153 btn6_4 =tkinter.Button(text ='+',bg='#708069',command=lambda:presssign('+')) 154 btn6_4.place(x=190,y =370,width =50,height=50) 155 # =================================================================================== 156 root.mainloop() 157 # ===================================================================================