侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现简易版计算器

Python  /  管理员 发布于 7年前   166

学了一周的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链接oracle数据库以及数据库的增删改查实例
    下一条:
    python列表的增删改查实例代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客