Python+Tkinter 实现计算器功能

  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 # ===================================================================================

猜你喜欢

转载自www.cnblogs.com/PerfectWanan/p/9119174.html