import tkinter
#定義計算器類
class Calc:
#初始化魔術方法
def __init__(self):
#初始化共用屬性
#定義一個用于存放被計算字符串的列表
self.operationList = []
#定義運算標記 確定是否輸入了運算符號
self.isOper = False
#初始化界面
self.initWindows()
#更改按鍵盤顏色方法
def changeBg(self,evt):
evt.widget['bg'] = 'cyan'
#恢復按鍵盤顏色方法
def backBg(self,evt):
evt.widget['bg'] = 'lightgray'
#數(shù)字按鈕操作方法
def buttonAction(self,number):
#判斷用戶是否按下了運算按鈕
if self.isOper == True:
#在界面上顯示運算符之后的數(shù)
self.num.set(number)
#運算標記復位
self.isOper = False
else:
#沒有銨下運算按鈕
#判斷原始界面數(shù)字是否為0
existNumber = self.num.get()
if existNumber == '0':
#如果界面中的初始數(shù)據(jù)為0 則獲取用戶輸入數(shù)據(jù)并顯示
self.num.set(number)
else:
#如果界面中的初始數(shù)據(jù)不為0 則對字符進行累加
self.num.set(self.num.get()+number)
#運算按鈕操作方法
def operation(self,opFlag):
#運算標記置為真
self.isOper = True
#獲取界面中存在的數(shù) 并且寫入列表
self.operationList.append(self.num.get())
#當前運算符號不會在上一步中寫入 需要單獨寫入
self.operationList.append(opFlag)
#獲取運行結果操作方法
def getResult(self):
#將當前界面中數(shù)字加入計算列表
self.operationList.append(self.num.get())
#開始計算
result = eval(''.join(self.operationList))
self.num.set(result)
#全部清空重新計算方法
def clearAll(self):
#界面置0 計算列表置0
self.num.set('0')
self.operationList.clear()
#運算標志復位
self.isOper = False
#實現(xiàn)退格鍵方法
def backSpace(self):
#獲取當前顯示數(shù)字長度
strLength = len(self.num.get())
#如果當前顯示有數(shù)字
if strLength > 1:
#刪除字串中最后一個字
presentStr = self.num.get()
presentStr = presentStr[:strLength - 1]
self.num.set(presentStr)
else:
self.num.set('0')
#正負號實現(xiàn)方法
def pm(self):
presentStr = self.num.get()
#實現(xiàn)增加和去除負號
if presentStr[0] == '-':
self.num.set(presentStr[1:])
#原始字串不得以-號和0開頭
elif presentStr[0] not in ('-','0'):
self.num.set('-'+presentStr)
#界面布局方法
def initWindows(self):
#生成主窗口 定制窗口尺寸
root = tkinter.Tk()
root.minsize(400,500)
root.title('微硬計算器')
#生成用于保存數(shù)值的變量
self.num = tkinter.StringVar()
self.num.set(0)
#運算結果輸出位置
result = tkinter.Label(root,width=20,height=2,bg='white',bd=10,anchor='e',font=('宋體',50),textvariable=self.num)
result.place(relx=0,rely=0,relwidth=1.0,relheight=0.4)
###########################以下為按鍵部分############################
buttonCE = tkinter.Button(root,text='CE',bg='lightgray',command = self.clearAll)
buttonCE.place(relx=0,rely=0.4,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonCE.bind('',self.changeBg)
buttonCE.bind('',self.backBg)
buttonC = tkinter.Button(root,text='C',bg='lightgray',command = self.clearAll)
buttonC.place(relx=0.25,rely=0.4,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonC.bind('',self.changeBg)
buttonC.bind('',self.backBg)
buttonDel = tkinter.Button(root,text='<-',bg='lightgray',command = self.backSpace)
buttonDel.place(relx=0.5,rely=0.4,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonDel.bind('',self.changeBg)
buttonDel.bind('',self.backBg)
buttonDiv = tkinter.Button(root,text='÷',bg='lightgray',command = lambda : self.operation('/'))
buttonDiv.place(relx=0.75,rely=0.4,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonDiv.bind('',self.changeBg)
buttonDiv.bind('',self.backBg)
button1 = tkinter.Button(root,text='1',bg='lightgray',command = lambda : self.buttonAction('1'))
button1.place(relx=0,rely=0.5,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button1.bind('',self.changeBg)
button1.bind('',self.backBg)
button2 = tkinter.Button(root,text='2',bg='lightgray',command = lambda : self.buttonAction('2'))
button2.place(relx=0.25,rely=0.5,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button2.bind('',self.changeBg)
button2.bind('',self.backBg)
button3 = tkinter.Button(root,text='3',bg='lightgray',command = lambda : self.buttonAction('3'))
button3.place(relx=0.5,rely=0.5,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button3.bind('',self.changeBg)
button3.bind('',self.backBg)
buttonX = tkinter.Button(root,text='x',bg='lightgray',command = lambda : self.operation('*'))
buttonX.place(relx=0.75,rely=0.5,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonX.bind('',self.changeBg)
buttonX.bind('',self.backBg)
button4 = tkinter.Button(root,text='4',bg='lightgray',command = lambda : self.buttonAction('4'))
button4.place(relx=0,rely=0.6,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button4.bind('',self.changeBg)
button4.bind('',self.backBg)
button5 = tkinter.Button(root,text='5',bg='lightgray',command = lambda : self.buttonAction('5'))
button5.place(relx=0.25,rely=0.6,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button5.bind('',self.changeBg)
button5.bind('',self.backBg)
button6 = tkinter.Button(root,text='6',bg='lightgray',command = lambda : self.buttonAction('6'))
button6.place(relx=0.5,rely=0.6,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button6.bind('',self.changeBg)
button6.bind('',self.backBg)
button_ = tkinter.Button(root,text='-',bg='lightgray',command = lambda : self.operation('-'))
button_.place(relx=0.75,rely=0.6,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button_.bind('',self.changeBg)
button_.bind('',self.backBg)
button7 = tkinter.Button(root,text='7',bg='lightgray',command = lambda : self.buttonAction('7'))
button7.place(relx=0,rely=0.7,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button7.bind('',self.changeBg)
button7.bind('',self.backBg)
button8 = tkinter.Button(root,text='8',bg='lightgray',command = lambda : self.buttonAction('8'))
button8.place(relx=0.25,rely=0.7,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button8.bind('',self.changeBg)
button8.bind('',self.backBg)
button9 = tkinter.Button(root,text='9',bg='lightgray',command = lambda : self.buttonAction('9'))
button9.place(relx=0.5,rely=0.7,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button9.bind('',self.changeBg)
button9.bind('',self.backBg)
buttonAdd = tkinter.Button(root,text='+',bg='lightgray',command = lambda : self.operation('+'))
buttonAdd.place(relx=0.75,rely=0.7,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonAdd.bind('',self.changeBg)
buttonAdd.bind('',self.backBg)
buttonFlag = tkinter.Button(root,text='±',bg='lightgray',command = self.pm)
buttonFlag.place(relx=0,rely=0.8,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonFlag.bind('',self.changeBg)
buttonFlag.bind('',self.backBg)
button0 = tkinter.Button(root,text='0',bg='lightgray',command = lambda : self.buttonAction('0'))
button0.place(relx=0.25,rely=0.8,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
button0.bind('',self.changeBg)
button0.bind('',self.backBg)
buttonPoint = tkinter.Button(root,text='.',bg='lightgray',command = lambda : self.buttonAction('.'))
buttonPoint.place(relx=0.5,rely=0.8,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonPoint.bind('',self.changeBg)
buttonPoint.bind('',self.backBg)
buttonEque = tkinter.Button(root,text='=',bg='lightgray',command = self.getResult)
buttonEque.place(relx=0.75,rely=0.8,relwidth=0.25,relheight=0.1)
#綁定按鈕 生成鼠標經(jīng)過變色效果
buttonEque.bind('',self.changeBg)
buttonEque.bind('',self.backBg)
#########################以上為按鍵部分############################
#底部顯示信息
bottomLabel = tkinter.Label(root,text = 'Power By Microhard Corpration\n@2017'
,bg='cyan',width=30,height = 1,padx=0)
bottomLabel.place(relx=0,rely=0.9,relwidth=1.0,relheight=0.1)
#主窗口循環(huán)
root.mainloop()
#實例化計算器對象
c = Calc()
本文名稱:基于pythontkinter的簡單計算器(v1.0)
轉載來于:
http://weahome.cn/article/pssogj.html