python基于wxpython实现可视化四则运算计算器

目录

准备工作

编码实现

运行效果


准备工作

  1. 安装wxpython库:pip install wxpython
  2. 使用WxPython可视化编辑器设计计算页面
  • 在“设计窗口”拖动组件设置属性后可保存*.pyec文件以便后期继续改进

  • “代码界面”则为“设计窗口”的可视化布局代码

  • 为方便调试可在“设置”-“调试目录”选择“WxPython可视化编辑器”解压后的文件夹路径,“解释器”选择python.exe的文件路径,然后在“设计窗口”直接右击“调试”看可视化效果

编码实现

# -*- coding:utf-8 -*-
import wx


class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='Python计算器 By Johnny', size=(450, 385), name='frame', style=541071360)
#        icon = wx.Icon(r'C:\Users\izhan\Desktop\calc\logo.jpg')
#        self.SetIcon(icon)
        self.qdck = wx.Panel(self)
        self.Centre()
        # 用于存储计算过程
        self.expression = ""
        self.bjk1 = wx.TextCtrl(self.qdck, size=(415, 50), pos=(10, 10), value='', name='text', style=wx.TE_RIGHT)
        bjk1_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.bjk1.SetFont(bjk1_字体)
        self.an1 = wx.Button(self.qdck, size=(100, 50), pos=(10, 65), label='回退', name='button')
        an1_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an1.SetFont(an1_字体)
        self.an1.Bind(wx.EVT_BUTTON, self.an1_anbdj)
        self.an2 = wx.Button(self.qdck, size=(100, 50), pos=(115, 65), label='清空', name='button')
        an2_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an2.SetFont(an2_字体)
        self.an2.Bind(wx.EVT_BUTTON, self.an2_anbdj)
        self.an3 = wx.Button(self.qdck, size=(100, 50), pos=(220, 65), label='退出', name='button')
        an3_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an3.SetFont(an3_字体)
        self.an3.Bind(wx.EVT_BUTTON, self.an3_anbdj)
        self.an4 = wx.Button(self.qdck, size=(100, 50), pos=(325, 65), label='+', name='button')
        an4_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an4.SetFont(an4_字体)
        self.an4.Bind(wx.EVT_BUTTON, self.an4_anbdj)
        self.an5 = wx.Button(self.qdck, size=(100, 50), pos=(10, 120), label='7', name='button')
        an5_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an5.SetFont(an5_字体)
        self.an5.Bind(wx.EVT_BUTTON, self.an5_anbdj)
        self.an6 = wx.Button(self.qdck, size=(100, 50), pos=(115, 120), label='8', name='button')
        an6_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an6.SetFont(an6_字体)
        self.an6.Bind(wx.EVT_BUTTON, self.an6_anbdj)
        self.an7 = wx.Button(self.qdck, size=(100, 50), pos=(220, 120), label='9', name='button')
        an7_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an7.SetFont(an7_字体)
        self.an7.Bind(wx.EVT_BUTTON, self.an7_anbdj)
        self.an8 = wx.Button(self.qdck, size=(100, 50), pos=(325, 120), label='-', name='button')
        an8_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an8.SetFont(an8_字体)
        self.an8.Bind(wx.EVT_BUTTON, self.an8_anbdj)
        self.an9 = wx.Button(self.qdck, size=(100, 50), pos=(10, 175), label='4', name='button')
        an9_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an9.SetFont(an9_字体)
        self.an9.Bind(wx.EVT_BUTTON, self.an9_anbdj)
        self.an10 = wx.Button(self.qdck, size=(100, 50), pos=(115, 175), label='5', name='button')
        an10_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an10.SetFont(an10_字体)
        self.an10.Bind(wx.EVT_BUTTON, self.an10_anbdj)
        self.an11 = wx.Button(self.qdck, size=(100, 50), pos=(220, 175), label='6', name='button')
        an11_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an11.SetFont(an11_字体)
        self.an11.Bind(wx.EVT_BUTTON, self.an11_anbdj)
        self.an12 = wx.Button(self.qdck, size=(100, 50), pos=(325, 175), label='×', name='button')
        an12_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an12.SetFont(an12_字体)
        self.an12.Bind(wx.EVT_BUTTON, self.an12_anbdj)
        self.an13 = wx.Button(self.qdck, size=(100, 50), pos=(10, 230), label='1', name='button')
        an13_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an13.SetFont(an13_字体)
        self.an13.Bind(wx.EVT_BUTTON, self.an13_anbdj)
        self.an14 = wx.Button(self.qdck, size=(100, 50), pos=(115, 230), label='2', name='button')
        an14_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an14.SetFont(an14_字体)
        self.an14.Bind(wx.EVT_BUTTON, self.an14_anbdj)
        self.an15 = wx.Button(self.qdck, size=(100, 50), pos=(220, 230), label='3', name='button')
        an15_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an15.SetFont(an15_字体)
        self.an15.Bind(wx.EVT_BUTTON, self.an15_anbdj)
        self.an16 = wx.Button(self.qdck, size=(100, 50), pos=(325, 230), label='÷', name='button')
        an16_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an16.SetFont(an16_字体)
        self.an16.Bind(wx.EVT_BUTTON, self.an16_anbdj)
        self.an17 = wx.Button(self.qdck, size=(100, 50), pos=(10, 285), label='0', name='button')
        an17_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an17.SetFont(an17_字体)
        self.an17.Bind(wx.EVT_BUTTON, self.an17_anbdj)
        self.an18 = wx.Button(self.qdck, size=(100, 50), pos=(115, 285), label='.', name='button')
        an18_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an18.SetFont(an18_字体)
        self.an18.Bind(wx.EVT_BUTTON, self.an18_anbdj)
        self.an19 = wx.Button(self.qdck, size=(100, 50), pos=(220, 285), label='+/-', name='button')
        an19_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an19.SetFont(an19_字体)
        self.an19.Bind(wx.EVT_BUTTON, self.an19_anbdj)
        self.an20 = wx.Button(self.qdck, size=(100, 50), pos=(325, 285), label='=', name='button')
        an20_字体 = wx.Font(10, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
        self.an20.SetFont(an20_字体)
        self.an20.Bind(wx.EVT_BUTTON, self.an20_anbdj)

    def an1_anbdj(self, event):
        if self.expression:
            self.expression = self.expression[: - 1]
            self.bjk1.SetValue(self.expression)

    def an2_anbdj(self, event):
        self.expression = ""
        self.bjk1.SetValue(self.expression)

    def an3_anbdj(self, event):
        self.Close()

    def an4_anbdj(self, event):
        self.expression += "+"
        self.bjk1.SetValue(self.expression)

    def an5_anbdj(self, event):
        self.expression += "7"
        self.bjk1.SetValue(self.expression)

    def an6_anbdj(self, event):
        self.expression += "8"
        self.bjk1.SetValue(self.expression)

    def an7_anbdj(self, event):
        self.expression += "9"
        self.bjk1.SetValue(self.expression)

    def an8_anbdj(self, event):
        self.expression += "-"
        self.bjk1.SetValue(self.expression)

    def an9_anbdj(self, event):
        self.expression += "4"
        self.bjk1.SetValue(self.expression)

    def an10_anbdj(self, event):
        self.expression += "5"
        self.bjk1.SetValue(self.expression)

    def an11_anbdj(self, event):
        self.expression += "6"
        self.bjk1.SetValue(self.expression)

    def an12_anbdj(self, event):
        self.expression += "×"
        self.bjk1.SetValue(self.expression)

    def an13_anbdj(self, event):
        self.expression += "1"
        self.bjk1.SetValue(self.expression)

    def an14_anbdj(self, event):
        self.expression += "2"
        self.bjk1.SetValue(self.expression)

    def an15_anbdj(self, event):
        self.expression += "3"
        self.bjk1.SetValue(self.expression)

    def an16_anbdj(self, event):
        self.expression += "÷"
        self.bjk1.SetValue(self.expression)

    def an17_anbdj(self, event):
        self.expression += "0"
        self.bjk1.SetValue(self.expression)

    def an18_anbdj(self, event):
        self.expression += "."
        self.bjk1.SetValue(self.expression)

    def an19_anbdj(self, event):
        if self.expression and self.expression[0] == '-':
            self.expression = self.expression[1:]
        else:
            self.expression = '-' + self.expression
        self.bjk1.SetValue(self.expression)

    def an20_anbdj(self, event):
        import re
        # 将乘除运算先进行计算
        while re.search(r'(\d+(\.\d+)?)([×÷])(\d+(\.\d+)?)', self.expression):
            temp_expression = re.search(r'(\d+(\.\d+)?)([×÷])(\d+(\.\d+)?)', self.expression).group()
            if '×' in temp_expression:
                num1, num2 = map(float, temp_expression.split('×'))
                result = num1 * num2
            else:
                num1, num2 = map(float, temp_expression.split('÷'))
                result = num1 / num2
            self.expression = self.expression.replace(temp_expression, str(result))
        # 再进行加减运算
        while re.search(r'(\d+(\.\d+)?)([+-])(\d+(\.\d+)?)', self.expression):
            temp_expression = re.search(r'(\d+(\.\d+)?)([+-])(\d+(\.\d+)?)', self.expression).group()
            if '+' in temp_expression:
                num1, num2 = map(float, temp_expression.split('+'))
                result = num1 + num2
            else:
                num1, num2 = map(float, temp_expression.split('-'))
                result = num1 - num2
            self.expression = self.expression.replace(temp_expression, str(result))
        self.bjk1.SetValue(self.expression)


class myApp(wx.App):
    def OnInit(self):
        self.frame = Frame()
        self.frame.Show(True)
        return True


if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Johnny|俊伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值