python制作簡單計算器功能
本文實例為大家分享了python實現(xiàn)簡單計算器功能的具體代碼,供大家參考,具體內(nèi)容如下
效果如圖:
主要思路:
用列表保存按下的鍵,按下等于,轉(zhuǎn)換為字符串,利用內(nèi)置函數(shù)eval計算字符串的值。
代碼:
from tkinter import * ? W = 280 #窗口寬度 H = 460 #窗口高度 process_H = 110 #顯示運算過程的標(biāo)簽高度 result_H = 50 ? #顯示運算結(jié)果的標(biāo)簽高度 msFont = '微軟雅黑' #字體 fontSize = 20 #字體大小 ? btnBoderWidth = 0.5 #邊框?qū)挾? btnColor = '#4F4F4F' #按鈕顏色 btnWidth = 70 #按鈕寬度 btnHeight = 60 #按鈕高度 ? mainWindows = Tk() mainWindows.title('計算器') mainWindows.minsize(W,H) ? str_process = StringVar() str_process.set("") str_result = StringVar() str_result.set("0") ? process = Label(mainWindows,font=(msFont,fontSize),bg='orange',anchor='se',wraplength='280',textvariable=str_process) process.place(width=W,height=process_H) #顯示運算過程的標(biāo)簽 result = Label(mainWindows,font=(msFont,fontSize+10),bg='orange',anchor='se',textvariable=str_result) result.place(y=process_H,width=W,height=result_H) #顯示運算結(jié)果的標(biāo)簽 ? button_AC = Button(mainWindows,font=(msFont,fontSize),text='AC',fg='orange',bd=btnBoderWidth,command=lambda :clickAC()) button_AC.place(x=0,y=process_H+result_H,width=btnWidth,height=btnHeight) button_back = Button(mainWindows,font=(msFont,fontSize),text='←',fg=btnColor,bd=btnBoderWidth,command=lambda :clickBack()) button_back.place(x=btnWidth,y=process_H+result_H,width=btnWidth,height=btnHeight) button_div = Button(mainWindows,font=(msFont,fontSize),text='÷',fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper('/')) button_div.place(x=btnWidth*2,y=process_H+result_H,width=btnWidth,height=btnHeight) button_mul = Button(mainWindows,font=(msFont,fontSize),text='×',fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper('*')) button_mul.place(x=btnWidth*3,y=process_H+result_H,width=btnWidth,height=btnHeight) ? button_7 = Button(mainWindows,font=(msFont,fontSize),text='7',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('7')) button_7.place(x=0,y=process_H+result_H+btnHeight,width=btnWidth,height=btnHeight) button_8 = Button(mainWindows,font=(msFont,fontSize),text='8',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('8')) button_8.place(x=btnWidth,y=process_H+result_H+btnHeight,width=btnWidth,height=btnHeight) button_9 = Button(mainWindows,font=(msFont,fontSize),text='9',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('9')) button_9.place(x=btnWidth*2,y=process_H+result_H+btnHeight,width=btnWidth,height=btnHeight) button_minus = Button(mainWindows,font=(msFont,fontSize),text='-',fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper('-')) button_minus.place(x=btnWidth*3,y=process_H+result_H+btnHeight,width=btnWidth,height=btnHeight) ? button_4 = Button(mainWindows,font=(msFont,fontSize),text='4',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('4')) button_4.place(x=0,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight) button_5 = Button(mainWindows,font=(msFont,fontSize),text='5',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('5')) button_5.place(x=btnWidth,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight) button_6 = Button(mainWindows,font=(msFont,fontSize),text='6',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('6')) button_6.place(x=btnWidth*2,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight) button_add = Button(mainWindows,font=(msFont,fontSize),text='+',fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper('+')) button_add.place(x=btnWidth*3,y=process_H+result_H+btnHeight*2,width=btnWidth,height=btnHeight) ? button_1 = Button(mainWindows,font=(msFont,fontSize),text='1',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('1')) button_1.place(x=0,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight) button_2 = Button(mainWindows,font=(msFont,fontSize),text='2',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('2')) button_2.place(x=btnWidth,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight) button_3 = Button(mainWindows,font=(msFont,fontSize),text='3',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('3')) button_3.place(x=btnWidth*2,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight) button_equal = Button(mainWindows,font=(msFont,fontSize),text='=',bg='orange',fg=btnColor,bd=btnBoderWidth,command=lambda :clickEqual()) button_equal.place(x=btnWidth*3,y=process_H+result_H+btnHeight*3,width=btnWidth,height=btnHeight*2) ? button_percent = Button(mainWindows,font=(msFont,fontSize),text='%',fg=btnColor,bd=btnBoderWidth,command=lambda :clickOper("%")) button_percent.place(x=0,y=process_H+result_H+btnHeight*4,width=btnWidth,height=btnHeight) button_0 = Button(mainWindows,font=(msFont,fontSize),text='0',fg=btnColor,bd=btnBoderWidth,command=lambda :clickNum('0')) button_0.place(x=btnWidth,y=process_H+result_H+btnHeight*4,width=btnWidth,height=btnHeight) button_point = Button(mainWindows,font=(msFont,fontSize),text='.',fg=btnColor,bd=btnBoderWidth,command=lambda :clickPoint()) button_point.place(x=btnWidth*2,y=process_H+result_H+btnHeight*4,width=btnWidth,height=btnHeight) ? process_list = [] s_result = "" isNum = [False] #上一位按下的是否是數(shù)字 point = [True] #小數(shù)點使用情況 def clickNum(num): ?#按下數(shù)字 ? ? isNum.append(True) ? ? point.append(point[-1]) #按下數(shù)字,小數(shù)點的標(biāo)志不變 ? ? process_list.append(num) ? ? s_process = "".join(process_list) ? ? str_process.set(s_process) ? def clickOper(sign):#按下運算符 ? ? global isNum,point ? ? if isNum[-1]: ? ? ? ? process_list.append(sign) ? ? ? ? isNum.append(False) ? ? ? ? point.append(True) #按下運算符,小數(shù)點標(biāo)志為可以按下小數(shù)點 ? ? else: ? ? ? ? process_list.pop() ? ? ? ? process_list.append(sign) ? ? s_process = "".join(process_list) ? ? str_process.set(s_process) ? def clickEqual():#按下等于 ? ? global s_result ? ? s_process = "".join(process_list) ? ? s_result = eval(s_process) ? ? s_result = str(s_result)[0:11] #結(jié)果只顯示11位 ? ? str_process.set(s_process) ? ? str_result.set(s_result) ? def clickAC():#按下清除 ? ? global s_result,isNum,point ? ? s_result = "0" ? ? isNum = [False] ?#狀態(tài)回到初始時候 ? ? point = [True] ? ? process_list.clear() ? ? str_result.set(s_result) ? ? str_process.set("") def clickBack(): #按下退格鍵 ? ? global point, isNum ? ? if len(process_list) > 0: ? ? ? ? isNum.pop(-1) #刪除最后一位的狀態(tài) ? ? ? ? point.pop(-1) ? ? ? ? process_list.pop() ? ? ? ? s_process = "".join(process_list) ? ? ? ? str_process.set(s_process) ? def clickPoint():#按下小數(shù)點 ? ? global point,isNum ? ? if isNum[-1] and point[-1]: ? ? ? ? process_list.append(".") ? ? ? ? s_process = "".join(process_list) ? ? ? ? str_process.set(s_process) ? ? ? ? isNum.append(False) ? ? ? ? point.append(False) ? mainWindows.mainloop()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用sort和class實現(xiàn)的多級排序功能示例
這篇文章主要介紹了Python使用sort和class實現(xiàn)的多級排序功能,涉及Python基于面向?qū)ο蟮脑乇闅v、列表排序、添加等相關(guān)操作技巧,需要的朋友可以參考下2018-08-08基于Python實現(xiàn)四維圖像繪制系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言實現(xiàn)一個簡單的四維圖像繪制系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09python3+requests接口自動化session操作方法
今天小編就為大家分享一篇python3+requests接口自動化session操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10詳解Selenium+PhantomJS+python簡單實現(xiàn)爬蟲的功能
這篇文章主要介紹了詳解Selenium+PhantomJS+python簡單實現(xiàn)爬蟲的功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python微信企業(yè)號開發(fā)之回調(diào)模式接收微信端客戶端發(fā)送消息及被動返回消息示例
這篇文章主要介紹了Python微信企業(yè)號開發(fā)之回調(diào)模式接收微信端客戶端發(fā)送消息及被動返回消息的方法,涉及Python微信企業(yè)號回調(diào)模式消息響應(yīng)機(jī)制相關(guān)操作技巧,需要的朋友可以參考下2017-08-08