python计算器程序_利用Python代码编写计算器小程序
1 importtkinter2 importtkinter.messagebox3 importmath4 classJSQ:5
6
7 def __init__(self):8 #创建主界面
9 self.root =tkinter.Tk()10 self.root.minsize(270, 330)11 self.root.maxsize(270, 330)12 self.root.title('小可乐的计算器')13 #定义一个变量赋值给页面label
14 self.result =tkinter.StringVar()15 #界面先显示个0
16 self.result.set(0)17 #设置一个全局变量 运算数字和符号的列表
18 self.lists =[]19 #添加一个判断是否按下运算符号的标志
20 self.isPressSign =False21 #添加一个判断是否运算完毕的标志,如果运算完毕在获取数字的方法中会清空上一轮运算结果
22 self.islistsclear =False23 #添加一个判断百分号是否使用的功能
24 self.isbaifenhao =False25 #为了下面的百分号方法使用(在百分号中为按下运算符号之后的数字)
26 self.num1 = ''
27 #定义一个全局变量(获取百分好的结果)为了在‘=’运算的时候输出
28 self.result3 =None29 #获取运算符号之前的数字
30 self.num = ''
31 #获取运算符号给百分好方法使用
32 self.sign1 = ''
33 self.layout()34 self.menubar()35 #将窗口一直显示
36 self.root.mainloop()37
38 defmenubar(self):39 #创建总菜单
40 allmenu =tkinter.Menu(self.root)41 #创建子菜单
42 filemenu = tkinter.Menu(allmenu, tearoff=0)43 #在子菜单里添加文件
44 filemenu.add_command(label='标准型(T) Alt+1',command = lambda: self.func2())45 filemenu.add_command(label='科学性(S) Alt+2',command = lambda: self.func2())46 filemenu.add_command(label='程序员(p) Alt+3',command = lambda: self.func2())47 filemenu.add_command(label='统计信息(A) Alt+4',command = lambda: self.func2())48 #创建分割线
49 filemenu.add_separator()50 filemenu.add_command(label='历史记录(Y) Ctrl+H',command = lambda: self.func2())51 filemenu.add_command(label='数学分组(I)',command = lambda: self.func2())52 filemenu.add_separator()53 filemenu.add_command(label='基本(B) Ctrl+F4',command = lambda: self.func2())54 filemenu.add_command(label='单位转换(U) Ctrl+U',command = lambda: self.func2())55 filemenu.add_command(label='日期计算(D) Ctrl+E',command = lambda: self.func2())56 #在子菜单里再创建一个菜单
57 filemenunei = tkinter.Menu(filemenu, tearoff=0)58 #在子菜单里的菜单添加文件
59 filemenunei.add_command(label='抵押(M)',command = lambda: self.func2())60 filemenunei.add_command(label='汽车租赁(V)',command = lambda: self.func2())61 filemenunei.add_command(label='油耗(mpg)(F)',command = lambda: self.func2())62 filemenunei.add_command(label='油耗(1/100km)(U)',command = lambda: self.func2())63 #将子菜单里的菜单添加到子菜单里
64 filemenu.add_cascade(label='工作表(W)', menu=filemenunei)65 #添加退出功能
66 filemenu.add_command(label='退出', command=self.root.quit)67 #将子菜单添加到总菜单里
68 allmenu.add_cascade(label='查看(V)', menu=filemenu)69 #再创建一个子菜单
70 editmenu = tkinter.Menu(allmenu, tearoff=0)71 #在子菜单里添加文件
72 editmenu.add_command(label='复制(C)',command = lambda: self.func2())73 editmenu.add_command(label='粘贴(P)',command = lambda: self.func2())74 #创建分割线
75 editmenu.add_separator()76 #在子菜单里创建一个菜单
77 editmenunei = tkinter.Menu(editmenu, tearoff=0)78 #在子菜单里的菜单添加文件
79 editmenunei.add_command(label='复制历史记录(I)', stat='disable')80 editmenunei.add_command(label='编辑(E) F2', stat='disable')81 editmenunei.add_command(label='取消编辑(N) Esc', stat='disable')82 editmenunei.add_command(label='清除(L) Ctrl+Shift+D', stat='disable')83 #将子菜单里的菜单添加到子菜单
84 editmenu.add_cascade(label='历史记录(H)', menu=editmenunei)85 #将子菜单添加到总菜单
86 allmenu.add_cascade(label='编辑(E)', menu=editmenu)87 #创建第三个子菜单
88 helpmenu = tkinter.Menu(allmenu, tearoff=0)89 #在第三个子菜单里添加文件
90 helpmenu.add_command(label='查看帮助(v) F1',command = lambda: self.func2())91 #创建分割线
92 helpmenu.add_separator()93 helpmenu.add_command(label='关于计算器(A)',command = lambda: self.func2())94 #将第三个子菜单添加到总菜单中
95 allmenu.add_cascade(label='帮助(H)', menu=helpmenu)96 #将总菜单布局到主窗口
97 self.root.config(menu=allmenu)98
99 #下面代码用于页面布局
100 deflayout(self):101 #显示结果的标签
102 label = tkinter.Label(self.root, textvariable=self.result, bg='white', font=('黑体', 10), anchor='e')103 label.place(x=20, y=10, width=230, height=30)104
105 btnmc = tkinter.Button(self.root, text='MC',command = lambda: self.func2())106 btnmc.place(x=20, y=50, width=30, height=30)107
108 btnmr = tkinter.Button(self.root, text='MR',command = lambda: self.func2())109 btnmr.place(x=70, y=50, width=30, height=30)110
111 btnms = tkinter.Button(self.root, text='MS',command = lambda: self.func2())112 btnms.place(x=120, y=50, width=30, height=30)113
114 btnmjia = tkinter.Button(self.root, text='M+',command = lambda: self.func2())115 btnmjia.place(x=170, y=50, width=30, height=30)116
117 btnmjian = tkinter.Button(self.root, text='M-',command = lambda: self.func2())118 btnmjian.place(x=220, y=50, width=30, height=30)119
120 btnjiantou = tkinter.Button(self.root, text='←', command=lambda: self.jiantou())121 btnjiantou.place(x=20, y=90, width=30, height=30)122
123 btnce = tkinter.Button(self.root, text='CE', command=lambda: self.CE())124 btnce.place(x=70, y=90, width=30, height=30)125
126 btnc = tkinter.Button(self.root, text='C', command=lambda: self.clears())127 btnc.place(x=120, y=90, width=30, height=30)128
129 btnzhengfu = tkinter.Button(self.root, text='±', command=lambda: self.zhenffu())130 btnzhengfu.place(x=170, y=90, width=30, height=30)131
132 btnkaigen = tkinter.Button(self.root, text='√', command=lambda: self.sqrts())133 btnkaigen.place(x=220, y=90, width=30, height=30)134
135 btn7 = tkinter.Button(self.root, text='7', command=lambda: self.pressNum('7'))136 btn7.place(x=20, y=130, width=30, height=30)137
138 btn8 = tkinter.Button(self.root, text='8', command=lambda: self.pressNum('8'))139 btn8.place(x=70, y=130, width=30, height=30)140
141 btn9 = tkinter.Button(self.root, text='9', command=lambda: self.pressNum('9'))142 btn9.place(x=120, y=130, width=30, height=30)143
144 btnchu = tkinter.Button(self.root, text='/', command=lambda: self.pressCompute('/'))145 btnchu.place(x=170, y=130, width=30, height=30)146
147 btnbaifen = tkinter.Button(self.root, text='%', command=lambda: self.baifenhao())148 btnbaifen.place(x=220, y=130, width=30, height=30)149
150 btn4 = tkinter.Button(self.root, text='4', command=lambda: self.pressNum('4'))151 btn4.place(x=20, y=170, width=30, height=30)152
153 btn5 = tkinter.Button(self.root, text='5', command=lambda: self.pressNum('5'))154 btn5.place(x=70, y=170, width=30, height=30)155
156 btn6 = tkinter.Button(self.root, text='6', command=lambda: self.pressNum('6'))157 btn6.place(x=120, y=170, width=30, height=30)158
159 btncheng = tkinter.Button(self.root, text='*', command=lambda: self.pressCompute('*'))160 btncheng.place(x=170, y=170, width=30, height=30)161
162 btnfenshu = tkinter.Button(self.root, text='1/X', command=lambda: self.fenshu())163 btnfenshu.place(x=220, y=170, width=30, height=30)164
165 btn1 = tkinter.Button(self.root, text='1', command=lambda: self.pressNum('1'))166 btn1.place(x=20, y=210, width=30, height=30)167
168 btn2 = tkinter.Button(self.root, text='2', command=lambda: self.pressNum('2'))169 btn2.place(x=70, y=210, width=30, height=30)170
171 btn3 = tkinter.Button(self.root, text='3', command=lambda: self.pressNum('3'))172 btn3.place(x=120, y=210, width=30, height=30)173
174 btnjian = tkinter.Button(self.root, text='-', command=lambda: self.pressCompute('-'))175 btnjian.place(x=170, y=210, width=30, height=30)176
177 btndenghao = tkinter.Button(self.root, text='=', command=lambda: self.pressEqual())178 btndenghao.place(x=220, y=210, width=30, height=70)179
180 btn0 = tkinter.Button(self.root, text='0', command=lambda: self.pressNum('0'))181 btn0.place(x=20, y=250, width=80, height=30)182
183 btndian = tkinter.Button(self.root, text='.', command=lambda: self.pressNum('.'))184 btndian.place(x=120, y=250, width=30, height=30)185
186 btnjia = tkinter.Button(self.root, text='+', command=lambda: self.pressCompute('+'))187 btnjia.place(x=170, y=250, width=30, height=30)188
189 #数字函数(获取数字的函数)
190 defpressNum(self,num):191 #下面的百分好会用到
192 self.num1 =num193 #判断是否按下运算符号
194 if self.isPressSign ==False:195 pass
196 #如果按下运算符号界面归0
197 else:198 self.result.set(0)199 self.isPressSign =False200 #判断运算是否完毕
201 if self.islistsclear ==False:202 #获取面板上原有的数字
203 oldNum =self.result.get()204 #判断原有数字是否为零
205 if oldNum == '0':206 #将传入的数字显示
207 self.result.set(num)208 else:209 #原来的数字加上现在输入的数字
210 newNum = oldNum +num211 self.result.set(newNum)212 #运算完毕界面自动清空
213 else:214 #lists.clear()#如果添加这行代码就不能在上一轮运算结果的基础上运算了
215 self.result.set('0')216 self.islistsclear =False217 self.result.set(num)218
219 #运算操作(获取运算符号然后将数字和符号添加到列表中)
220 defpressCompute(self,sign):221 #获取界面上的数字
222 ifTrue:223 #获取输入运算符之前的数字
224 self.num =self.result.get()225 #将数字加入列表之中
226 self.lists.append(self.num)227 #将运算符加入到列表之中
228 self.lists.append(sign)229 #将运算符赋值给sign1(下面的百分号方法会用到)
230 self.sign1 =sign231 #将是否按下运算符号标志改成True
232 self.isPressSign =True233 #在刚开始的时候添加一个负号(-)用于正负好转换使用
234 #如果列表第一位为0
235 if self.lists[0] == '0':236 #如果列表第二位为‘-’
237 if self.lists[1] == '-':238 self.result.set('-')239 #设置运算符号的状态
240 self.isPressSign =False241
242 #获取运算结果(将列表内的值转换为字符串,然后将字符串用python代码执行)
243 defpressEqual(self):244 #获取当前页面的数字
245 curnum =self.result.get()246 self.lists.append(curnum)247 #将列表中的数据转换为字符串
248 computeStr = ''.join(self.lists)249 #将字符串用python代码执行
250 endNum =eval(computeStr)251 #界面显示结果
252 self.result.set(endNum)253 #如果百分号标志触发
254 if self.isbaifenhao ==True:255 #界面显示self.result3
256 self.result.set(self.result3)257 #运算结束后将列表清空
258 self.lists.clear()259 #将运算标志改成True
260 self.islistsclear =True261
262 #清空运算
263 defclears(self):264 self.lists.clear()265 self.result.set('0')266
267 #删除上一位数字
268 defCE(self):269 self.result.set('0')270
271 #用于更改数的正负值
272 defzhenffu(self):273 self.result1 =self.result.get()274 self.result.set(float(self.result1) * (-1))275 self.islistsclear =True276
277 #用于开平方运算
278 defsqrts(self):279 result1 =self.result.get()280 self.result.set(math.sqrt(float(result1)))281 self.lists.clear()282 self.islistsclear =True283
284 #用于求x/9的值
285 deffenshu(self):286 result1 =self.result.get()287 self.result.set(1 /float(result1))288 self.islistsclear =True289
290 #用于求百分号功能的方法
291 defbaifenhao(self):292 listss =[]293 #判断如果输入一个数没输运算符号的话界面自动归零
294 if len(self.lists) < 1:295 self.result.set(0)296 else:297 #获取输入运算符号之前的数字
298 a1 =float(self.num)299 #获取运算符号
300 a2 =self.sign1301
302 #再次获取输入运算符号之前的数字
303 a3 =float(self.num)304
305 a4 = '*'
306 #算出最后一个数字的百分数
307 a6 = float(self.num1) / 100
308
309 #算出百分号的那个结果
310 resultmuqian = a3 *a6311 #总结果
312 resultbai = str(a1) + a2 + str(a3) + a4 +str(a6)313 #将字符串用python代码执行
314 self.result3 =eval(resultbai)315 #在界面上按下%符号是显示的结果
316 self.result.set(resultmuqian)317 #改变百分号的标志
318 self.isbaifenhao =True319
320 #箭头的意义删除后一位数字
321 defjiantou(self):322 result1 =self.result.get()323 result1 =list(result1)324 del result1[-1]325 result1 =str(result1)326 self.result.set(result1)327
328 deffunc2(self):329 tkinter.messagebox.askokcancel(title = '略过',message='没实现')330
331
332 myjsq = JSQ()
好了,以上便是利用Python代码实现一个计算器小程序的过程。
python计算器程序_利用Python代码编写计算器小程序相关推荐
- 初次入坑解析的小程序(决定写代码风格的小程序)
初次入坑解析的小程序(决定写代码风格的小程序) 我是一个大二的学生,在接触小程序之前我是一个学计算机运维的,后来入了坑,在入坑以后开发了两个小程序. 第一个是为学校开发的一个考勤的小程序,样式是别人设 ...
- mpvue 微信小程序_使用Vue.js开发微信小程序:开源框架mpvue解析
戳蓝字"CSDN云计算"关注我们哦! 作者 | 成全 责编 | 阿秃 转自 | 美团技术团队企业博客 前言 mpvue是一款使用Vue.js开发微信小程序的前端框架.使用此框架,开 ...
- java中的基本小程序_12个用Java编写基础小程序经典案例(收藏篇)
原标题:12个用Java编写基础小程序&经典案例(收藏篇) 如果是刚接触或者刚学习java,练习一些基础的算法还是必须的,可以提升思维和语法的使用. 1.输出两个int数中的最大值 impor ...
- 贵州农信凭证打印小程序_我的医保凭证小程序入口
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都会有分享,都是免费订阅,请您放心关注. ...
- 新版微信不停跳转到小程序_如何设置跳转微信小程序
一.功能效果 手机网站常用模块:文本.图片.按钮支持设置点击跳转微信小程序. 可实现手机微信端下,打开手机网站可与微信小程序的实现相互跳转. 二.注意事项 [版本]展示中级版及以上版本支持开通. [条 ...
- python用一行代码编写一个回声程序_利用Python实现一个WC程序
项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数.单词数和行数 ...
- python计算器小程序源码_python代码编写计算器小程序
本文实例为大家分享了python计算器小程序的具体代码,供大家参考,具体内容如下 import tkinter import tkinter.messagebox import math class ...
- python数据预测_利用Python编写一个数据预测工具
利用Python编写一个数据预测工具 发布时间:2020-11-07 17:12:20 来源:亿速云 阅读:96 这篇文章运用简单易懂的例子给大家介绍利用Python编写一个数据预测工具,内容非常详细 ...
- python测速程序_利用Python对网站进行测速
利用python可以编写的用于测试网站访问速率的代码,实现原理是输出打开某url的时间,并计算出访问100次的平均时间,最大时间和最小时间等等.根据时间的变化判断网站速度. 完整代码:import u ...
最新文章
- 《算法基础:打开算法之门》一1.5 拓展阅读
- 黄聪:TortoiseGit(乌龟git)保存用户名密码的方法
- 关于android设备唯一区分device id的取得
- R语言包_plotly
- PAT甲级1142 Maximal Clique :[C++题解]图论、最大团、枚举
- win32应用程序创建流程
- boost::mpl::advance相关用法的测试程序
- 在腾讯云上创建您的SQL Cluster(1)
- 【js与jquery】三级联动菜单的制作
- 如何查看jar包的版本号?
- 征稿 | 软件学报专刊征文:知识赋能的信息系统
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- Xamarin.Android开发实践(十四)
- 计算机的网络默认下拉列表出不来,网页下拉菜单打不开,怎么解决?
- Freescale MC9S08AW60汇编学习笔记(三)
- 开源Dimdim是网络会议的桥接方案
- 如何让Java文件在虚拟机中运行_深入理解JVM--Java程序如何在虚拟机中运行
- linux内核make 时间久,Linux内核makefile问题
- 大话数据结构-单链表勘误,计划调整
- 理解分布函数(概率论)
热门文章
- Keil颜色配置(黑底,不同种类字不同颜色)
- 【mysql数据库开放授权】
- VBS批量缩放Word图片
- CV之IG之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成带背景的不同尺寸高质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)案例
- 基于MATLAB的数字信号滤波器设计
- python爬虫爬取知网
- 过拟合及解决方案--过拟合主要是有两个原因造成的:数据太少 + 模型太复杂
- 嵌入式C语言设计模式 --- 原型模式
- 计算机应用课堂教学结题汇报,课题结题验收总结报告.ppt
- matlab关于图像增强的毕业论文,基于MATLAB图像增强技术毕业论文