網站首頁 編程語言 正文
本文實例為大家分享了python實現簡單計算器功能的具體代碼,供大家參考,具體內容如下
效果如圖:
主要思路:
用列表保存按下的鍵,按下等于,轉換為字符串,利用內置函數eval計算字符串的值。
代碼:
from tkinter import * ? W = 280 #窗口寬度 H = 460 #窗口高度 process_H = 110 #顯示運算過程的標簽高度 result_H = 50 ? #顯示運算結果的標簽高度 msFont = '微軟雅黑' #字體 fontSize = 20 #字體大小 ? btnBoderWidth = 0.5 #邊框寬度 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) #顯示運算過程的標簽 result = Label(mainWindows,font=(msFont,fontSize+10),bg='orange',anchor='se',textvariable=str_result) result.place(y=process_H,width=W,height=result_H) #顯示運算結果的標簽 ? 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] #上一位按下的是否是數字 point = [True] #小數點使用情況 def clickNum(num): ?#按下數字 ? ? isNum.append(True) ? ? point.append(point[-1]) #按下數字,小數點的標志不變 ? ? 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) #按下運算符,小數點標志為可以按下小數點 ? ? 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] #結果只顯示11位 ? ? str_process.set(s_process) ? ? str_result.set(s_result) ? def clickAC():#按下清除 ? ? global s_result,isNum,point ? ? s_result = "0" ? ? isNum = [False] ?#狀態回到初始時候 ? ? 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) #刪除最后一位的狀態 ? ? ? ? point.pop(-1) ? ? ? ? process_list.pop() ? ? ? ? s_process = "".join(process_list) ? ? ? ? str_process.set(s_process) ? def clickPoint():#按下小數點 ? ? 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()
原文鏈接:https://blog.csdn.net/lanse_l/article/details/87175234
相關推薦
- 2024-01-16 Oracle的取整函數
- 2022-12-14 Rocksdb?Memtable數據結構源碼解析_Android
- 2024-02-29 UNI-APP項目在引用官方提供的Uni-App-Demo實例中的組件時應該注意的問題
- 2022-04-26 Jquery實現多選下拉列表左右移動_jquery
- 2022-06-21 python繪制帶有色塊的折線圖_python
- 2022-12-21 Python中Turtle庫改變畫筆(海龜)方向的兩種方法總結_python
- 2024-03-14 ThreadLocal使用,配合攔截器HandlerInterceptor使用
- 2022-08-26 docker搭建memcached的詳細步驟_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支