python实现简易版计算器


Posted in Python onJune 22, 2020

学了一周的Python,这篇文章算是为这段时间自学做的小总结。

一、Python简介

Python是一门十分优美的脚本语言,如果学过java、c++那入门Python是非常简单的。Python具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。

二、Python版计算器的实现

工具准备:

1. Python2.7
2. wxPython
3. wxGlade界面编辑工具
4. pyCharm

具体配置什么的我就不说了,网上有很多。Python的GUI开发库有很多,这里我们使用wxPython。用wxGlade编辑界面,wxGlade是一款很好用的GUI编辑工具,它最大的优点是能自动生成编辑好的图形界面的代码。

这里主要介绍几点:

wx.TextCtrl(文本输入控件),这个作为计算器的显示屏,点击数字时用AppendText方法将数字添加至文本末尾,要取出数字时用GetValue方法,点击运算符时要将文本框中的数字清空(先存储)用Clear方法然后还有将操作符保存,点击等号后要将第二个操作数存储,然后用int方法将字符串转换为数字,计算后用SetValue方法将结果送入文本框,具体代码如下:

import wx 
 
# begin wxGlade: extracode 
# end wxGlade 
 
 
class MyFrame(wx.Frame): 
 def __init__(self, *args, **kwds): 
 # begin wxGlade: MyFrame.__init__ 
 kwds["style"] = wx.DEFAULT_FRAME_STYLE 
 wx.Frame.__init__(self, *args, **kwds) 
 self.text_ctrl_1 = wx.TextCtrl(self, -1, "",style=wx.TE_READONLY) 
 self.button_37 = wx.Button(self, -1, "1") 
 self.button_38 = wx.Button(self, -1, "2") 
 self.button_39 = wx.Button(self, -1, "3") 
 self.button_40 = wx.Button(self, -1, "+") 
 self.button_41 = wx.Button(self, -1, "4") 
 self.button_42 = wx.Button(self, -1, "5") 
 self.button_43 = wx.Button(self, -1, "6") 
 self.button_44 = wx.Button(self, -1, "-") 
 self.button_46 = wx.Button(self, -1, "7") 
 self.button_45 = wx.Button(self, -1, "8") 
 self.button_47 = wx.Button(self, -1, "9") 
 self.button_48 = wx.Button(self, -1, "x") 
 self.button_49 = wx.Button(self, -1, "C") 
 self.button_50 = wx.Button(self, -1, "0") 
 self.button_51 = wx.Button(self, -1, "=") 
 self.button_52 = wx.Button(self, -1, "/") 
 
 self.__set_properties() 
 self.__do_layout() 
 
 self.Bind(wx.EVT_BUTTON, self.bu1, self.button_37) 
 self.Bind(wx.EVT_BUTTON, self.bu2, self.button_38) 
 self.Bind(wx.EVT_BUTTON, self.bu3, self.button_39) 
 self.Bind(wx.EVT_BUTTON, self.bu_plus, self.button_40) 
 self.Bind(wx.EVT_BUTTON, self.bu4, self.button_41) 
 self.Bind(wx.EVT_BUTTON, self.bu5, self.button_42) 
 self.Bind(wx.EVT_BUTTON, self.bu6, self.button_43) 
 self.Bind(wx.EVT_BUTTON, self.bu_min, self.button_44) 
 self.Bind(wx.EVT_BUTTON, self.bu7, self.button_46) 
 self.Bind(wx.EVT_BUTTON, self.bu8, self.button_45) 
 self.Bind(wx.EVT_BUTTON, self.bu9, self.button_47) 
 self.Bind(wx.EVT_BUTTON, self.bu_mul, self.button_48) 
 self.Bind(wx.EVT_BUTTON, self.bu_clear, self.button_49) 
 self.Bind(wx.EVT_BUTTON, self.bu0, self.button_50) 
 self.Bind(wx.EVT_BUTTON, self.bu_result, self.button_51) 
 self.Bind(wx.EVT_BUTTON, self.bu_chu, self.button_52) 
 # end wxGlade 
 self.Show(True) 
 
 def __set_properties(self): 
 # begin wxGlade: MyFrame.__set_properties 
 self.SetTitle("Python Calculater by CYG") 
 self.text_ctrl_1.SetMinSize((400, 50)) 
 self.button_37.SetMinSize((100, 50)) 
 self.button_38.SetMinSize((100, 50)) 
 self.button_39.SetMinSize((100, 50)) 
 self.button_40.SetMinSize((100, 50)) 
 self.button_41.SetMinSize((100, 50)) 
 self.button_42.SetMinSize((100, 50)) 
 self.button_43.SetMinSize((100, 50)) 
 self.button_44.SetMinSize((100, 50)) 
 self.button_46.SetMinSize((100, 50)) 
 self.button_45.SetMinSize((100, 50)) 
 self.button_47.SetMinSize((100, 50)) 
 self.button_48.SetMinSize((100, 50)) 
 self.button_49.SetMinSize((100, 50)) 
 self.button_50.SetMinSize((100, 50)) 
 self.button_51.SetMinSize((100, 50)) 
 self.button_52.SetMinSize((100, 50)) 
 # end wxGlade 
 
 def __do_layout(self): 
 # begin wxGlade: MyFrame.__do_layout 
 sizer_2 = wx.BoxSizer(wx.VERTICAL) 
 sizer_3 = wx.BoxSizer(wx.VERTICAL) 
 grid_sizer_1 = wx.GridSizer(4, 4, 0, 0) 
 sizer_3.Add(self.text_ctrl_1, 0, 0, 0) 
 grid_sizer_1.Add(self.button_37, 0, 0, 0) 
 grid_sizer_1.Add(self.button_38, 0, 0, 0) 
 grid_sizer_1.Add(self.button_39, 0, 0, 0) 
 grid_sizer_1.Add(self.button_40, 0, 0, 0) 
 grid_sizer_1.Add(self.button_41, 0, 0, 0) 
 grid_sizer_1.Add(self.button_42, 0, 0, 0) 
 grid_sizer_1.Add(self.button_43, 0, 0, 0) 
 grid_sizer_1.Add(self.button_44, 0, 0, 0) 
 grid_sizer_1.Add(self.button_46, 0, 0, 0) 
 grid_sizer_1.Add(self.button_45, 0, 0, 0) 
 grid_sizer_1.Add(self.button_47, 0, 0, 0) 
 grid_sizer_1.Add(self.button_48, 0, 0, 0) 
 grid_sizer_1.Add(self.button_49, 0, 0, 0) 
 grid_sizer_1.Add(self.button_50, 0, 0, 0) 
 grid_sizer_1.Add(self.button_51, 0, 0, 0) 
 grid_sizer_1.Add(self.button_52, 0, 0, 0) 
 sizer_3.Add(grid_sizer_1, 1, wx.EXPAND, 0) 
 sizer_2.Add(sizer_3, 1, wx.EXPAND, 0) 
 self.SetSizer(sizer_2) 
 sizer_2.Fit(self) 
 self.Layout() 
 # end wxGlade 
 
 def bu1(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("1") 
 event.Skip() 
 
 def bu2(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("2") 
 event.Skip() 
 
 def bu3(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("3") 
 event.Skip() 
 
 def bu_plus(self, event): # wxGlade: MyFrame.<event_handler> 
 self.num1=self.text_ctrl_1.GetValue() 
 self.op="+" 
 self.text_ctrl_1.Clear() 
 event.Skip() 
 
 def bu4(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("4") 
 event.Skip() 
 
 def bu5(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("5") 
 event.Skip() 
 
 def bu6(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("6") 
 event.Skip() 
 
 def bu_min(self, event): # wxGlade: MyFrame.<event_handler> 
 self.num1=self.text_ctrl_1.GetValue() 
 self.op="-" 
 self.text_ctrl_1.Clear() 
 event.Skip() 
 
 def bu7(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("7") 
 event.Skip() 
 
 def bu8(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("8") 
 event.Skip() 
 
 def bu9(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("9") 
 event.Skip() 
 
 def bu_mul(self, event): # wxGlade: MyFrame.<event_handler> 
 self.num1=self.text_ctrl_1.GetValue() 
 self.op="x" 
 self.text_ctrl_1.Clear() 
 event.Skip() 
 
 def bu_clear(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.Clear() 
 event.Skip() 
 
 def bu0(self, event): # wxGlade: MyFrame.<event_handler> 
 self.text_ctrl_1.AppendText("0") 
 event.Skip() 
 
 def bu_chu(self, event): # wxGlade: MyFrame.<event_handler> 
 self.num1=self.text_ctrl_1.GetValue() 
 self.op="/" 
 self.text_ctrl_1.Clear() 
 event.Skip() 
 
 def bu_result(self, event): # wxGlade: MyFrame.<event_handler> 
 self.num2=self.text_ctrl_1.GetValue() 
 num1=int(self.num1) 
 num2=int(self.num2) 
 if self.op=="+": 
 self.text_ctrl_1.SetValue(str(num1+num2)) 
 elif self.op=="-": 
 self.text_ctrl_1.SetValue(str(num1-num2)) 
 elif self.op=="x": 
 self.text_ctrl_1.SetValue(str(num1*num2)) 
 elif self.op=="/": 
 self.text_ctrl_1.SetValue(str(num1/num2)) 
 event.Skip() 
 
 
# end of class MyFrame 
if __name__ == "__main__": 
 
 app=wx.App(False) 
 myframe=MyFrame(None) 
 app.MainLoop()

按钮的ID,名称什么的我基本都是用wxGlade自动生成的。
没有做什么美化,只是为了练练手,给张图:

python实现简易版计算器

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

Python 相关文章推荐
寻找网站后台地址的python脚本
Sep 01 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
Python中用于检查英文字母大写的isupper()方法
May 19 Python
浅谈Python中的闭包
Jul 08 Python
在Python的Django框架中创建语言文件
Jul 27 Python
Python中查看文件名和文件路径
Mar 31 Python
使用Python对SQLite数据库操作
Apr 06 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
python编程的核心知识点总结
Feb 08 Python
python编程学习使用管道Pipe编写优化代码
Nov 20 Python
python列表的增删改查实例代码
Jan 30 #Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 #Python
Python Tkinter实现简易计算器功能
Jan 30 #Python
python使用tkinter实现简单计算器
Jan 30 #Python
Python实现简单遗传算法(SGA)
Jan 29 #Python
Python之reload流程实例代码解析
Jan 29 #Python
Python中的默认参数实例分析
Jan 29 #Python
You might like
解析php时间戳与日期的转换
2013/06/06 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
vue如何将v-for中的表格导出来
2018/05/07 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
2018/05/31 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
详解Django中的过滤器
2015/07/16 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
python 实现二维列表转置
2019/12/02 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
企业晚会策划方案
2014/05/29 职场文书
教师节标语大全
2014/10/07 职场文书
售房协议书范本2014
2014/10/23 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs