1 import tkinter 2 3 4 # # 设置显示窗体及其属性 5 windows = tkinter.Tk() # 70*60 6 windows.title('SkyGrass catulator') 7 windows.geometry('280x440') 8 windows.resizable(width=False, height=False) 9 10 11 # # 定义显示界面,一个输入的数字界面,另一个是结果显示界面 12 result_user = tkinter.StringVar() # 用户按键显示界面 13 result_user.set(0) 14 result_end = tkinter.StringVar() # 计算结果返回界面 15 result_end.set('') 16 17 label = tkinter.Label(windows, font=('黑体', 21),fg='black',anchor = 'se',textvariable=result_user) 18 label.place(x = 0, y = 90, width = 280, height = 50) 19 label = tkinter.Label(windows, font=('黑体', 18),fg='#4F4F4F',anchor = 'se',textvariable=result_end) 20 label.place(y = 10, width = 280, height = 70) 21 22 23 ## 数字按键 24 btn0 = tkinter.Button(windows,text = '0',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1, command = lambda : pressNum('0')) 25 btn0.place(x = 0,y = 380,width = 70,height = 60) 26 27 btn1 = tkinter.Button(windows,text = '1',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('1')) 28 btn1.place(x = 0,y = 320,width = 70,height = 60) 29 btn2 = tkinter.Button(windows,text = '2',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('2')) 30 btn2.place(x = 70,y = 320,width = 70,height = 60) 31 btn3 = tkinter.Button(windows,text = '3',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('3')) 32 btn3.place(x = 140,y = 320,width = 70,height = 60) 33 34 btn4 = tkinter.Button(windows,text = '4',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('4')) 35 btn4.place(x = 0,y = 260,width = 70,height = 60) 36 btn5 = tkinter.Button(windows,text = '5',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('5')) 37 btn5.place(x = 70,y = 260,width = 70,height = 60) 38 btn6 = tkinter.Button(windows,text = '6',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('6')) 39 btn6.place(x = 140,y = 260,width = 70,height = 60) 40 41 btn7 = tkinter.Button(windows,text = '7',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('7')) 42 btn7.place(x = 0,y = 200,width = 70,height = 60) 43 btn8 = tkinter.Button(windows,text = '8',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('8')) 44 btn8.place(x = 70,y = 200,width = 70,height = 60) 45 btn9 = tkinter.Button(windows,text = '9',font = ('微软雅黑',20),fg = ('red'),bg ='#87CEE8',bd = 1,command = lambda : pressNum('9')) 46 btn9.place(x = 140,y = 200,width = 70,height = 60) 47 48 49 50 # # 字符按键 51 btntop = tkinter.Button(windows,text = '.',font = ('微软雅黑',20),fg = ('blue'),bg ='#87CEE8',bd = 1,command = lambda : pressCompu('.')) 52 btntop.place(x = 140,y = 380,width = 70,height = 60) 53 btnsum = tkinter.Button(windows,text = '=',font = ('微软雅黑',20),bg=('orange'),fg=('blue'),bd = 1,command = lambda : pressEqual()) 54 btnsum.place(x = 210,y = 320,width = 70,height = 120) 55 btnadd = tkinter.Button(windows,text = '+',font = ('微软雅黑',20),fg = ('blue'),bg='#A9A9A9',bd = 1,command = lambda : pressCompu('+')) 56 btnadd.place(x = 210,y = 200,width = 70,height = 120) 57 btnsub = tkinter.Button(windows,text = '-',font = ('微软雅黑',20),fg = ('blue'),bg='#A9A9A9',bd = 1,command = lambda : pressCompu('-')) 58 btnsub.place(x = 210,y = 140,width = 70,height = 60) 59 btnmul = tkinter.Button(windows,text = '*',font = ('微软雅黑',20),fg = ('blue'),bg='#A9A9A9',bd = 1,command = lambda : pressCompu('*')) 60 btnmul.place(x = 140,y = 140,width = 70,height = 60) 61 btndiv = tkinter.Button(windows,text = '/',font = ('微软雅黑',20),fg = ('blue'),bg='#A9A9A9',bd = 1,command = lambda : pressCompu('/')) 62 btndiv.place(x = 70,y = 140,width = 70,height = 60) 63 btnclr = tkinter.Button(windows,text = 'AC',font = ('微软雅黑',20),bg=('orange'),fg = ('blue'),bd = 1,command = lambda : pressCompu('AC')) 64 btnclr.place(x = 0,y = 140,width = 70,height = 60) 65 btnb = tkinter.Button(windows,text = '←',font = ('微软雅黑',20),fg = ('blue'),bg='orange',bd = 1,command = lambda : pressCompu('b')) 66 btnb.place(x = 70,y = 380,width = 70,height = 60) 67 68 69 #操作函数 70 user_list = [] #设置一个变量 保存运算数字和符号的列表 71 isPressSign = False #添加一个判断是否按下运算符号的标志,假设默认没有按下按钮 72 isPressNum = False 73 #数字函数 74 def pressNum(num): #设置一个数字函数 判断是否按下数字 并获取数字将数字写在显示版上 75 global user_list #全局化lists和按钮状态isPressSign 76 global isPressSign 77 if isPressSign == False: 78 pass 79 else: #重新将运算符号状态设置为否 80 result_user.set(0) 81 isPressSign = False 82 83 #判断界面的数字是否为0 84 oldnum = result_user.get() 85 if oldnum =='0': #如过界面上数字为0 则获取按下的数字 86 result_user.set(num) 87 else: #如果界面上的而数字不是0 则链接上新按下的数字 88 newnum = oldnum + num 89 result_user.set(newnum) #将按下的数字写到面板中 90 91 92 #运算函数 93 def pressCompu(sign): 94 global user_list 95 global isPressSign 96 num = result_user.get() 97 user_list.append(num) 98 99 user_list.append(sign) 100 isPressSign = True 101 102 if sign =='AC': 103 user_list.clear() 104 result_user.set(0) 105 if sign =='b': 106 a = num[0:-1] 107 user_list.clear() 108 result_user.set(a) 109 110 111 112 #获取运算结果函数 113 def pressEqual(): 114 global user_list 115 global isPressSign 116 117 118 curnum = result_user.get() #设置当前数字变量,并获取添加到列表 119 user_list.append(curnum) 120 121 computrStr = ''.join(user_list) 122 endNum = eval(computrStr) 123 result_user.set(endNum) 124 result_end.set(computrStr) 125 user_list.clear() 126 127 windows.mainloop()
来源:https://www.cnblogs.com/skygrass0531/p/12298926.html