Python实现的计算器功能示例


Posted in Python onApril 26, 2018

本文实例讲述了Python实现的计算器功能。分享给大家供大家参考,具体如下:

源码:

# -*- coding:utf-8 -*-
#! python2
from tkinter import *
__author__ = 'tianshl'
__date__ = '2017/10/16'
class Application(Frame):
 def __init__(self):
  Frame.__init__(self)
  self.grid()
  self.mem = ''    # 内存中的数据
  self.opt = ''    # 操作符
  self.display = StringVar() # 显示的数据
  self.display.set('0')  # 初始值
  self.need_cls = False  # 是否需要清屏
  self.create_widgets()
 # 清空
 def clear(self):
  self.mem = ''
  self.display.set('0')
 # 取反
 def negative(self):
  self.display.set(eval('-' + self.display.get()))
 # 四则运算
 def option(self, opt):
  if not self.need_cls:
   self.calculate()
  self.opt = opt
  self.need_cls = True
  self.mem = self.display.get()
 # 计算结果
 def calculate(self):
  if self.opt:
   try:
    self.display.set(eval(self.mem + self.opt + self.display.get()))
   except Exception:
    self.display.set('错误')
    self.need_cls = True
   self.opt = ''
   self.mem = ''
 # 百分比
 def percent(self):
  base = float(self.mem or 1) / 100
  display = eval('{}*{}'.format(self.display.get(), base))
  int_display = int(display)
  display = int_display if display == int_display else display
  self.display.set(display)
  self.need_cls = True
 # 输入
 def input(self, key):
  if self.need_cls:
   self.display.set('0')
   self.need_cls = False
  display = self.display.get()
  if display == '0' and key != '.':
   self.display.set(key)
  else:
   if '.' in display and key == '.':
    return
   self.display.set(display + key)
 # 创建组件
 def create_widgets(self):
  # 显示框
  Entry(self, textvariable=self.display, state="readonly", width=35).grid(
   row=0, column=0, columnspan=4)
  # 键盘
  keyboards = [
   ['C', '+/-', '%', '/'], 
   ['7', '8', '9', '*'], 
   ['4', '5', '6', '-'],
   ['1', '2', '3', '+'],
   ['0', '.', '=']
  ]
  for row, keys in enumerate(keyboards):
   row_num = 3 + row
   for col, key in enumerate(keys):
    if key == 'C':
     command = self.clear
    elif key == '+/-':
     command = self.negative
    elif key == '%':
     command = self.percent
    elif key in ['+', '-', '*', '/']:
     command = lambda s=key: self.option(s)
    elif key == '=':
     command = self.calculate
    else:
     command = lambda s=key: self.input(s)
    bt = Button(self, text=key, command=command, width=6)
    bt.grid(row=row_num, column=col)
app = Application()
# 设置窗口标题:
app.master.title('3water.com - 计算器')
# 设置窗口尺寸/位置
app.master.geometry("326x170+200+200")
# 设置窗口不可变
app.master.resizable(width=False, height=False)
# 主消息循环:
app.mainloop()

运行效果:

Python实现的计算器功能示例

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线一元函数(方程)求解计算工具:
http://tools.3water.com/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:
http://tools.3water.com/jisuanqi/jsqkexue

在线计算器_标准计算器:
http://tools.3water.com/jisuanqi/jsq

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 解析XML python模块xml.dom解析xml实例代码
Feb 07 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
sublime text 3配置使用python操作方法
Jun 11 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
详解python3中的真值测试
Aug 13 Python
python 多线程串行和并行的实例
Feb 22 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
python中yield的用法详解
Jan 13 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 Python
python email smtplib模块发送邮件代码实例
Apr 26 #Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 #Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 #Python
Python实现按中文排序的方法示例
Apr 25 #Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 #Python
python自动登录12306并自动点击验证码完成登录的实现源代码
Apr 25 #Python
PyQt5实现拖放功能
Apr 25 #Python
You might like
php error_log 函数的使用
2009/04/13 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
php实现文件上传基本验证
2020/03/04 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
Python中的上下文管理器和with语句的使用
2018/04/17 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
Python3常见函数range()用法详解
2019/12/30 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
高级3D打印市场:Gambody
2019/12/26 全球购物
运动员获奖感言
2014/08/15 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
MySQL Server 层四个日志
2022/03/31 MySQL
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA