# python实现计算器(Tkinter+Unittest+exe) **Repository Path**: thomas_git/pythonCaculator-Tkinter-Unittest-exe ## Basic Information - **Project Name**: python实现计算器(Tkinter+Unittest+exe) - **Description**: python实现计算器(Tkinter+Unittest+报错+exe) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-01-28 - **Last Updated**: 2024-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README @[TOC](文章目录) --- # 作业信息 | 这个作业属于哪个课程 | [2301-计算机学院-软件工程](https://bbs.csdn.net/forums/ssynkqtd-05) | | -------------------- | ------------------------------------------------------------ | | 这个作业要求在哪里 | [软工实践第一次作业](https://bbs.csdn.net/topics/617294583?csdn_share_tail=%7B%22type%22:%22communityCloud%22,%22rType%22:%22topic%22,%22rId%22:%22617294583%22,%22source%22:%22m0_63669388%22%7D) | | 这个作业的目标 | 实现一个具备基本功能的可视化计算器 | | 其他参考文献 | [框架参考](https://blog.csdn.net/m0_68111267/article/details/131731173?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-1-131731173-blog-115474788.235%5Ev38%5Epc_relevant_anti_vip_base&spm=1001.2101.3001.4242.2&utm_relevant_index=2) | `提示:以下是本篇文章正文内容` # 解题思路描述 1.语言环境:python语言 2.界面设计:利用python的Tkinter库实现计算器界面设计 3.逻辑设计:主要通过eval功能计算数值,同时调用math库里的函数 4.功能完善: 按键颜色、大小等外观设计; 实现连续计算功能。 # Gitcode项目地址 [python简易计算器](https://gitee.com/sxl_code/102101337_calculator_frontend) # PSP表格 | PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | | --------------------------------------- | ---------------------------------------- | ---------------- | ---------------- | | Planning | 计划 | 10 | 10 | | • Estimate | • 估计这个任务需要多少时间 | 10 | 10 | | Development | 开发 | 60 | 100 | | • Analysis | • 需求分析 (包括学习新技术) | 120 | 150 | | • Design Spec | • 生成设计文档 | 10 | 10 | | • Design Review | • 设计复审 | 10 | 10 | | • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 20 | 30 | | • Design | • 具体设计 | 30 | 40 | | • Coding | • 具体编码 | 100 | 160 | | • Code Review | • 代码复审 | 20 | 100 | | • Test | • 测试(自我测试,修改代码,提交修改) | 30 | 60 | | Reporting | 报告 | 150 | 250 | | • Test Repor | • 测试报告 | 20 | 20 | | • Size Measurement | • 计算工作量 | 10 | 10 | | • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 10 | | | 合计 | 610 | 970 | # 设计与实现过程 ## 1.按键button设计 运用tkinter.Button,其中利用command=lambda:引用 Add()函数,利用grid()布局 `提示:(仅展示了一些按钮制作)` ```python ##数字键 button1 = tk.Button(root, text=' 1 ', bg=color1, command=lambda: Add(1), height=1, width=7) button1.grid(row=2, column=0) ##运算键 add = tk.Button(root, text=' + ', bg=color1, command=lambda: Add("+"), height=1, width=7) add.grid(row=2, column=3) ##清空键 clear = tk.Button(root, text='Clear', bg=color3, command=Clear, height=1, width=7) clear.grid(row=2, column=6) ##结果键 equal = tk.Button(root, text=' = ', bg=color3, command=Result, height=1, width=7) equal.grid(row=5, column=6) ``` ## 2.创建输入框 ```python entrys = tk.Entry(root, textvariable=result,width=28) entrys.grid(columnspan=7, ipadx=104) ``` ## 3.字符添加函数Add() `提示:定义两个全局变量t,t1,初始值为空` t为实际字符串;t1为显示字符串 可视化界面显示t1 ```python def Add(num): global t,t1 t1 = t1 + str(num) if num=="^": t=t+"**" elif num=="lg": t=t+"math.log10" elif num=="ln": t=t+"math.log" elif num=="sin": t=t+"math.sin" elif num=="cos": t=t+"math.cos" elif num=="tan": t=t+"math.tan" elif num=="!": t="math.factorial("+t+")" elif num=="π": t=t+"math.pi" elif num=="e": t=t+"math.e" else:t=t+str(num) print(t) result.set(t1) ``` ## 4.结果运算函数Result() 利用try ,except测试 total保留计算结果两位小数,并将结果再次保存到t,t1中,直到清空 小优化: 原本:计算1+2=3后需要Clear()清空,进行下次计算。修改后:可利用上次值继续运算 ```python def Result(): try: global t,t1 total= round(float(eval(t)),2) print(total) t=t1=str(total) result.set(t) except: result.set(" error ") t=t1="" ``` ## 5.清除运算函数Clear() 清空t,t1,屏幕内容 ```python def Clear(): global t,t1 t=t1="" result.set("") ``` ## 关键功能展示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cab2d99b5cff4d97ba79f1b6950bfbee.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/9f794534404545af94c56e6b2e4cb45e.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/7ce62540349945fb8c11cc9665bc4e66.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/72379542670c43bb8e879657a4c78781.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/a5812a86286b48f0b704a74c47df75b0.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/97e4451ecaae43dd84d588c3c28244f5.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/ea78b92cfed34a54a0ab374ff114950a.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/28e7ae8cc62d4819b11f047555bb9ab4.png#pic_center) # 程序性能改进 1.按键优化 *——>× /——>÷ ![在这里插入图片描述](https://img-blog.csdnimg.cn/17ab8e30d00843c7b1564c66ec8813c6.png#pic_center) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c2f13bed6ab94b99a888b95b0ee9edb4.png#pic_center) 2.重复计算 可继续使用上次计算结果,上文已解释 # 单元测试展示 # 异常处理措施与改进 当连续输入多个运算符或缺少运算语法错误时自动报错 ![在这里插入图片描述](https://img-blog.csdnimg.cn/18840a3f04fa4e60a587709a89a28539.png#pic_center) # 心路历程与收获 1.了解了项目开发过程, 进行计划,需求分析,开发时编写代码、满足需求、设计文档,单元测试、bug调试等。 2.学会了pythonTkinter库的许多使用方式,对math库有了更深了解 3.增强了我的代码撰写能力和修改代码的能力