python使用tkinter实现简单计算器


Posted in Python onJanuary 30, 2018

本文实例为大家分享了python使用tkinter实现简单计算器的具体代码,供大家参考,具体内容如下

class Counter: 
 #引入tkinter 
 import tkinter as tk 
 #引入消息弹窗模块 
 import tkinter.messagebox as mbox 
 
 #初始化Counter 
 def __init__(self): 
 #生成一个窗口对象 
 self.window = self.tk.Tk() 
 #命名窗口对象的显示title 
 self.window.title('计算器') 
 #设置窗口的大小 
 self.window.minsize(240, 325) 
 self.window.maxsize(240, 325) 
 #是否清空显示框判定参数 
 self.is_init_lable = False 
 #设置菜单 
 self.set_menu() 
 #设置显示框 
 self.lable_show = self.tk.Label(text='', anchor='se', font=('黑体', 30), fg='black') 
 self.lable_show.place(x=0, y=0, width=240, height=80) 
 #设置按钮组件 
 self.set_buttons() 
 #将窗口放入主消息队列 
 self.window.mainloop() 
 
 #设置菜单 
 def set_menu(self): 
 #创建总菜单 
 menubar = self.tk.Menu(self.window) 
 #创建一个下拉菜单,并且加入文件菜单 
 filemenu = self.tk.Menu(menubar, tearoff=0) 
 #创建下来菜单的选项 
 filemenu.add_command(label="退出计算器", command=self.window.quit) 
 #print author的函数 
 def show_author(): 
  self.mbox.showinfo(message='Wiz333@XDL 2017') 
 filemenu.add_command(label="作者", command=show_author) 
 #将文件菜单作为下拉菜单添加到总菜单中,并且将命名为操作 
 menubar.add_cascade(label="操作", menu=filemenu) 
 #显示总菜单 
 self.window.config(menu=menubar) 
 
 #设置按钮组件 
 def set_buttons(self): 
 #7 
 btn7 = self.tk.Button(text='7', bd=2, font='黑体') 
 btn7.place(x=0, y=90, width=60, height=40) 
 #8 
 btn8 = self.tk.Button(text='8', bd=2, font='黑体') 
 btn8.place(x=60, y=90, width=60, height=40) 
 #9 
 btn9 = self.tk.Button(text='9', bd=2, font='黑体') 
 btn9.place(x=120, y=90, width=60, height=40) 
 #+ 
 btn_jia = self.tk.Button(text='+', bd=2, font='黑体') 
 btn_jia.place(x=180, y=90, width=60, height=40) 
 #4 
 btn4 = self.tk.Button(text='4', bd=2, font='黑体') 
 btn4.place(x=0, y=130, width=60, height=40) 
 #5 
 btn5 = self.tk.Button(text='5', bd=2, font='黑体') 
 btn5.place(x=60, y=130, width=60, height=40) 
 #6 
 btn6 = self.tk.Button(text='6', bd=2, font='黑体') 
 btn6.place(x=120, y=130, width=60, height=40) 
 #- 
 btn_jian = self.tk.Button(text='-', bd=2, font='黑体') 
 btn_jian.place(x=180, y=130, width=60, height=40) 
 #1 
 btn1 = self.tk.Button(text='1', bd=2, font='黑体') 
 btn1.place(x=0, y=170, width=60, height=40) 
 #2 
 btn2 = self.tk.Button(text='2', bd=2, font='黑体') 
 btn2.place(x=60, y=170, width=60, height=40) 
 #3 
 btn3 = self.tk.Button(text='3', bd=2, font='黑体') 
 btn3.place(x=120, y=170, width=60, height=40) 
 #* 
 btn_cheng = self.tk.Button(text='*', bd=2, font='黑体') 
 btn_cheng.place(x=180, y=170, width=60, height=40) 
 #0 
 btn0 = self.tk.Button(text='0', bd=2, font='黑体') 
 btn0.place(x=0, y=210, width=120, height=40) 
 #. 
 btn_point = self.tk.Button(text='.', bd=2, font='黑体') 
 btn_point.place(x=120, y=210, width=60, height=40) 
 #/ 
 btn_chu = self.tk.Button(text='/', bd=2, font='黑体') 
 btn_chu.place(x=180, y=210, width=60, height=40) 
 #取消 
 btn_cancel = self.tk.Button(text='C', bd=2, font='黑体') 
 btn_cancel.place(x=0, y=250, width=60, height=40) 
 #确定 
 btn_ok = self.tk.Button(text='=', bd=2, font='黑体') 
 btn_ok.place(x=60, y=250, width=180, height=40) 
 #绑定Button的点击事件 
 btn7.bind_class('Button', '<Button-1>', self.click_button) 
 
 #绑定Button的点击事件 
 def click_button(self,e): 
 #判断是否是新的运算,如果是则清空显示框 
 if self.is_init_lable: 
  self.lable_show['text'] = '' 
  self.is_init_lable = False 
 #label_show显示的累加 
 font = e.widget['text'] 
 self.lable_show['text'] += font 
 #异常捕获 
 try: 
  #判定运算符号重复的时候,使用最后输入的符号 
  if self.lable_show['text'][-1] in ['+','-','*','/'] and self.lable_show['text'][-2] in ['+','-','*','/']: 
  header = self.lable_show['text'][:-2] 
  footer = self.lable_show['text'][-1] 
  self.lable_show['text'] = header+footer 
 except: 
  pass 
 
 #普通计算 
 if e.widget['text'] == '=': 
  try: 
  res = eval(self.lable_show['text'][:-1]) 
  #print(res) 
  #小数点取到9位 
  self.lable_show['text'] = str(round(float(res), 5)) 
  self.isinit = True 
  except ZeroDivisionError: 
  #除法时,除数不能为0 
  self.mbox.showerror(message='除法计算时!除数不能为0!') 
  except: 
  self.mbox.showerror(message='算式有误') 
 #取消当前输入的字符 
 if e.widget['text'] == 'C': 
  cancel_res = self.lable_show['text'][:-2] 
  self.lable_show['text'] = cancel_res 
 
 
#实例化计算器对象 
wiz = Counter()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python简单连接MongoDB数据库的方法
Mar 15 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
python使用matplotlib绘制折线图教程
Feb 08 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
python连接数据库的方法
Oct 19 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
python 追踪except信息方式
Apr 25 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
Nov 28 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
Python实现简单遗传算法(SGA)
Jan 29 #Python
Python之reload流程实例代码解析
Jan 29 #Python
Python中的默认参数实例分析
Jan 29 #Python
Python使用遗传算法解决最大流问题
Jan 29 #Python
Python subprocess模块详细解读
Jan 29 #Python
python微信跳一跳游戏辅助代码解析
Jan 29 #Python
Python面向对象之继承代码详解
Jan 29 #Python
You might like
PHP 前加at符合@的作用解析
2015/07/31 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
JavaScript 字符串乘法
2009/08/20 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
替换python字典中的key值方法
2018/07/06 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
python列表list保留顺序去重的实例
2018/12/14 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
秋天的图画教学反思
2014/05/01 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
征求意见函
2015/06/05 职场文书