wxPython库实现简易计算器

实现功能如下:

1.加、减、乘、除、小数点、括号

2.可从键盘输入运算式进行运算

3.计算历史记录保存

 代码

'''
Author:YJJ
Time:2021/12/11 01:50
本计算器计算原理:
    对初值为0的计算式进行操作,通过内置eval()函数得出最终结果
'''
import wx

class Calculator(wx.Frame):    #总窗体类
    calculation = ""    #计算式初始化

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, 'Calculator', size=(420, 550))
        panel = wx.Panel(self)
        panel.SetBackgroundColour((139, 137, 137))

        self.inputField = wx.ComboBox(panel, value="", pos=(0, 0), size=(300, 50))  
        '''
        提供下拉框
        '''
        self.inputField.Bind(wx.EVT_TEXT, self.OnKeyTyped)

        '''
        对所有按钮进行设置
        从上至下依次为:{'1', '2', '3', '4', '5',
                      '6', '7', '8', '9', '0',
                      'Clr', '+', '-', '*', '/',
                       '.', '(', ')','←'}
        '''
        btn1 = wx.Button(panel, label="1", pos=(0, 300), size=(100, 100))    # 设置按钮
        self.Bind(wx.EVT_BUTTON, self.one, btn1)    # 按钮绑定
        btn1.SetBackgroundColour((255, 222, 173))    # 按钮颜色

        btn2 = wx.Button(panel, label="2", pos=(100, 300), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.two, btn2)
        btn2.SetBackgroundColour((255, 222, 173))

        btn3 = wx.Button(panel, label="3", pos=(200, 300), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.three, btn3)
        btn3.SetBackgroundColour((255, 222, 173))

        btn4 = wx.Button(panel, label="4", pos=(0, 200), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.four, btn4)
        btn4.SetBackgroundColour((255, 222, 173))

        btn5 = wx.Button(panel, label="5", pos=(100, 200), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.five, btn5)
        btn5.SetBackgroundColour((255, 222, 173))

        btn6 = wx.Button(panel, label="6", pos=(200, 200), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.six, btn6)
        btn6.SetBackgroundColour((255, 222, 173))

        btn7 = wx.Button(panel, label="7", pos=(0, 100), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.seven, btn7)
        btn7.SetBackgroundColour((255, 222, 173))

        btn8 = wx.Button(panel, label="8", pos=(100, 100), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.eight, btn8)
        btn8.SetBackgroundColour((255, 222, 173))

        btn9 = wx.Button(panel, label="9", pos=(200, 100), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.nine, btn9)
        btn9.SetBackgroundColour((255, 222, 173))

        btn0 = wx.Button(panel, label="0", pos=(0, 400), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.zero, btn0)
        btn0.SetBackgroundColour((255, 222, 173))

        btnclr = wx.Button(panel, label="CLR", pos=(300, 0), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.clear, btnclr)
        btnclr.SetBackgroundColour((240, 255, 255))

        btnplus = wx.Button(panel, label="+", pos=(300, 400), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.plus, btnplus)
        btnplus.SetBackgroundColour((240, 255, 255))

        btnminus = wx.Button(panel, label="-", pos=(300, 300), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.minus, btnminus)
        btnminus.SetBackgroundColour((240, 255, 255))

        btnmultiply = wx.Button(panel, label="x", pos=(300, 200), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.multiply, btnmultiply)
        btnmultiply.SetBackgroundColour((240, 255, 255))

        btndivide = wx.Button(panel, label="/", pos=(300, 100), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.divide, btndivide)
        btndivide.SetBackgroundColour((240, 255, 255))

        btnpoint = wx.Button(panel, label=".", pos=(100, 400), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.point, btnpoint)
        btnpoint.SetBackgroundColour((240, 255, 255))

        btnequal = wx.Button(panel, label="=", pos=(200, 400), size=(100, 100))
        self.Bind(wx.EVT_BUTTON, self.equal, btnequal)
        btnequal.SetBackgroundColour((240, 255, 255))

        btnleft = wx.Button(panel, label="(", pos=(0, 50), size=(100, 50))
        self.Bind(wx.EVT_BUTTON, self.left, btnleft)
        btnleft.SetBackgroundColour((240, 255, 255))

        btnright = wx.Button(panel, label=")", pos=(100, 50), size=(100, 50))
        self.Bind(wx.EVT_BUTTON, self.right, btnright)
        btnright.SetBackgroundColour((240, 255, 255))

        btnbackspace = wx.Button(panel, label="←", pos=(200, 50), size=(100, 50))
        self.Bind(wx.EVT_BUTTON, self.backspace, btnbackspace)
        btnbackspace.SetBackgroundColour((240, 255, 255))

    def OnKeyTyped(self, event):    #直接键盘输入
        self.calculation = event.GetString()
    '''
    定义每一个按钮的操作
    '''
    def one(self, event):
        self.calculation = self.calculation + "1"
        self.inputField.SetValue(self.calculation)

    def two(self, event):
        self.calculation = self.calculation + "2"
        self.inputField.SetValue(self.calculation)

    def three(self, event):
        self.calculation = self.calculation + "3"
        self.inputField.SetValue(self.calculation)

    def four(self, event):
        self.calculation = self.calculation + "4"
        self.inputField.SetValue(self.calculation)

    def five(self, event):
        self.calculation = self.calculation + "5"
        self.inputField.SetValue(self.calculation)

    def six(self, event):
        self.calculation = self.calculation + "6"
        self.inputField.SetValue(self.calculation)

    def seven(self, event):
        self.calculation = self.calculation + "7"
        self.inputField.SetValue(self.calculation)

    def eight(self, event):
        self.calculation = self.calculation + "8"
        self.inputField.SetValue(self.calculation)

    def nine(self, event):
        self.calculation = self.calculation + "9"
        self.inputField.SetValue(self.calculation)

    def zero(self, event):
        self.calculation = self.calculation + "0"
        self.inputField.SetValue(self.calculation)

    def clear(self, event):
        self.calculation = ""
        self.inputField.SetValue(self.calculation)

    def plus(self, event):
        self.calculation = self.calculation + "+"
        self.inputField.SetValue(self.calculation)

    def minus(self, event):
        self.calculation = self.calculation + "-"
        self.inputField.SetValue(self.calculation)

    def multiply(self, event):
        self.calculation = self.calculation + "*"
        self.inputField.SetValue(self.calculation)

    def divide(self, event):
        self.calculation = self.calculation + "/"
        self.inputField.SetValue(self.calculation)

    def point(self, event):
        self.calculation = self.calculation + "."
        self.inputField.SetValue(self.calculation)

    def left(self, event):
        self.calculation = self.calculation + "("
        self.inputField.SetValue(self.calculation)

    def right(self, event):
        self.calculation = self.calculation + ")"
        self.inputField.SetValue(self.calculation)

    def backspace(self,event):
        self.calculation = self.calculation[0:-1:1]
        self.inputField.SetValue(self.calculation)

    def equal(self, event):
        try:
            result = eval(self.calculation)    #计算式求值
            self.inputField.Insert(self.calculation, 0)    #将历史记录加入下拉框
            self.inputField.SetValue(str(result))    #输出框值为结果
        except Exception as e:
            self.inputField.SetValue('Input Illegal')
            print(e)
            return
        finally:
            self.calcuation = ""

if __name__ == '__main__':
    app = wx.App()
    frame = Calculator(parent=None, id=-1)
    frame.Show()
    app.MainLoop()

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值