使用python编写简易计算器,使用wxpython库

使用Python编写简易计算器

环境:Python3.8 + wxpython4.1.0
所有综合代码在最后面,效果图:
在这里插入图片描述

1、创建界面

wxpython补充知识:
1、wx.frame是一个基类,包含许多的wx.frame(窗口)构件,class MyFrame(wx.Frame)表示MyFrame这个类继承与wx.Frame类;
2、wx.frame.__init__构造方法确定容器的大小以及标题、id等各个属性;
3、wx.TextCtrl创建文本框,也就是计算器的输入框,后面的参数style这只文本框里面的位置,这里设置的wx.TE_RIGHT为居右;
4、wx.Button为创建按钮,后面需要为每一个组件赋予唯一id值
****lable=‘name’,这里的name是需要显示在按钮上的文字
****pos=(10,30),这里是设置此按钮(组件)的位置,size则是设置按钮(组件)的大小
5、捆绑事件:
将按钮和方法绑定:点击按钮的时候触发所绑定的方法

 按钮名.Bind(wx.EVT_BUTTON, self.方法名, 按钮名)

# 计算器界面
class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=100, title='计算器', size=(250, 350))
        panel = wx.Panel(self)
        # 创建文本框
        self.entry = wx.TextCtrl(panel, id=15, pos=(10, 0), size=(195, 28), style=wx.TE_RIGHT)

        #创建按钮
        self.btn_clear = wx.Button(parent=panel, id=10, label='C', pos=(10, 30), size=(45, 45))
        self.btn_divide = wx.Button(parent=panel, id=11, label='/', pos=(60, 30), size=(45, 45))
        self.btn_multiply = wx.Button(parent=panel, id=12, label='*', pos=(110, 30), size=(45, 45))
        self.btn_backspace = wx.Button(parent=panel, id=13, label='←', pos=(160, 30), size=(45, 45))
        self.btn_sub = wx.Button(parent=panel, id=14, label='-', pos=(160, 80), size=(45, 45))
        self.btn_add = wx.Button(parent=panel, id=15, label='+', pos=(160, 130), size=(45, 45))
        self.btn_point = wx.Button(parent=panel, id=16, label='.', pos=(110, 230), size=(45, 45))
        self.btn_equal = wx.Button(parent=panel, id=17, label='=', pos=(160, 180), size=(45, 95))
        self.btn_zero = wx.Button(parent=panel, id=0, label='0', pos=(10, 230), size=(95, 45))
        self.btn_seven = wx.Button(parent=panel, id=7, label='7', pos=(10, 80), size=(45, 45))
        self.btn_eight = wx.Button(parent=panel, id=8, label='8', pos=(60, 80), size=(45, 45))
        self.btn_nine = wx.Button(parent=panel, id=9, label='9', pos=(110, 80), size=(45, 45))
        self.btn_six = wx.Button(parent=panel, id=6, label='6', pos=(110, 130), size=(45, 45))
        self.btn_five = wx.Button(parent=panel, id=5, label='5', pos=(60, 130), size=(45, 45))
        self.btn_four = wx.Button(parent=panel, id=4, label='4', pos=(10, 130), size=(45, 45))
        self.btn_three = wx.Button(parent=panel, id=3, label='3', pos=(110, 180), size=(45, 45))
        self.btn_two = wx.Button(parent=panel, id=2, label='2', pos=(60, 180), size=(45, 45))
        self.btn_one = wx.Button(parent=panel, id=1, label='1', pos=(10, 180), size=(45, 45))
        #创建捆绑事件
        self.btn_one.Bind(wx.EVT_BUTTON, self.On_Btn_one, self.btn_one)
        self.btn_two.Bind(wx.EVT_BUTTON, self.On_Btn_two, self.btn_two)
        self.btn_three.Bind(wx.EVT_BUTTON, self.On_Btn_three, self.btn_three)
        self.btn_four.Bind(wx.EVT_BUTTON, self.On_Btn_four, self.btn_four)
        self.btn_five.Bind(wx.EVT_BUTTON, self.On_Btn_five, self.btn_five)
        self.btn_six.Bind(wx.EVT_BUTTON, self.On_Btn_six, self.btn_six)
        self.btn_seven.Bind(wx.EVT_BUTTON, self.On_Btn_seven, self.btn_seven)
        self.btn_eight.Bind(wx.EVT_BUTTON, self.On_Btn_eight, self.btn_eight)
        self.btn_nine.Bind(wx.EVT_BUTTON, self.On_Btn_nine, self.btn_nine)
        self.btn_zero.Bind(wx.EVT_BUTTON, self.On_Btn_zero, self.btn_zero)
        self.btn_divide.Bind(wx.EVT_BUTTON, self.On_Btn_divide, self.btn_divide)
        self.btn_clear.Bind(wx.EVT_BUTTON, self.On_Btn_clear, self.btn_clear)
        self.btn_multiply.Bind(wx.EVT_BUTTON, self.On_Btn_multiply, self.btn_multiply)
        self.btn_backspace.Bind(wx.EVT_BUTTON, self.On_Btn_backspace, self.btn_backspace)
        self.btn_sub.Bind(wx.EVT_BUTTON, self.On_Btn_sub, self.btn_sub)
        self.btn_add.Bind(wx.EVT_BUTTON, self.On_Btn_add, self.btn_add)
        self.btn_equal.Bind(wx.EVT_BUTTON, self.On_Btn_equal, self.btn_equal)
        self.btn_point.Bind(wx.EVT_BUTTON, self.On_Btn_point, self.btn_point)

2、创建按钮点击事件

补充知识:
1、self.entry.AppendText(“1”)
这里的self.entry是前面定义的文本框,.AppendText方法是往前面的文本框里面添加字符串,也就是后面括号里面的;
2、同理,Remove方法就是删除字符,这个方法在退格这个按钮里面会用到。退格按钮的基本思想是:
****(1)获取文本框里面的字符串长度;

input_len = len(self.entry.GetValue())

****(2)根据下标移除最后一个字符即可(self.entry是前面定义的文本框)

self.entry.Remove(input_len - 1, input_len)

3、计算的基本思想:
****(1)获取文本框字符串

pre_result = str(self.entry.GetValue())

****(2)通过eval()函数对其进行计算,eval()函数用来执行字符串表达式,并返回该字符串的值

result = eval(pre_result)

****(3)将计算都的值添加到文本框里面

self.entry.SetValue(str(result))

#创建按钮点击事件
    def On_Btn_one(self,event):
        self.entry.AppendText("1")
    def On_Btn_two(self, event):
        self.entry.AppendText("2")
    def On_Btn_three(self, event):
        self.entry.AppendText("3")
    def On_Btn_four(self, event):
        self.entry.AppendText("4")
    def On_Btn_five(self, event):
        self.entry.AppendText("5")
    def On_Btn_six(self, event):
        self.entry.AppendText("6")
    def On_Btn_seven(self, event):
        self.entry.AppendText("7")
    def On_Btn_eight(self, event):
        self.entry.AppendText("8")
    def On_Btn_nine(self, event):
        self.entry.AppendText("9")
    def On_Btn_zero(self, event):
        self.entry.AppendText("0")
    def On_Btn_point(self, event):
        self.entry.AppendText(".")
    def On_Btn_add(self, event):
        self.entry.AppendText("+")
    def On_Btn_sub(self, event):
        self.entry.AppendText("-")
    def On_Btn_multiply(self, event):
        self.entry.AppendText("*")
    def On_Btn_divide(self, event):
        self.entry.AppendText("/")
    def On_Btn_clear(self, event):
        self.entry.Clear()
    def On_Btn_backspace(self, event):
        input_len = len(self.entry.GetValue())
        self.entry.Remove(input_len - 1, input_len)
    def On_Btn_equal(self,event):
        try:
            pre_result = str(self.entry.GetValue())
            result = eval(pre_result)
            self.entry.SetValue(str(result))
        except:
            self.entry.SetValue("Error")

3、主函数运行

补充知识:
1、使用wx.App()将应用程序初始化

app = wx.App()

2、将我们所创建的应用程序界面展示出来

MyFrame(None).Show()

3、与第一点相对应,使用MainLoop()形成消息循环,否则该程序将直接退出

app.MainLoop()

if __name__ == '__main__':
    app = wx.App()
    MyFrame(None).Show()
    app.MainLoop()

综合代码

import wx
# 计算器界面
class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=100, title='计算器', size=(250, 350))
        panel = wx.Panel(self)
        # 创建文本框
        self.entry = wx.TextCtrl(panel, id=15, pos=(10, 0), size=(195, 28), style=wx.TE_RIGHT)

        #创建按钮
        self.btn_clear = wx.Button(parent=panel, id=10, label='C', pos=(10, 30), size=(45, 45))
        self.btn_divide = wx.Button(parent=panel, id=11, label='/', pos=(60, 30), size=(45, 45))
        self.btn_multiply = wx.Button(parent=panel, id=12, label='*', pos=(110, 30), size=(45, 45))
        self.btn_backspace = wx.Button(parent=panel, id=13, label='←', pos=(160, 30), size=(45, 45))
        self.btn_sub = wx.Button(parent=panel, id=14, label='-', pos=(160, 80), size=(45, 45))
        self.btn_add = wx.Button(parent=panel, id=15, label='+', pos=(160, 130), size=(45, 45))
        self.btn_point = wx.Button(parent=panel, id=16, label='.', pos=(110, 230), size=(45, 45))
        self.btn_equal = wx.Button(parent=panel, id=17, label='=', pos=(160, 180), size=(45, 95))
        self.btn_zero = wx.Button(parent=panel, id=0, label='0', pos=(10, 230), size=(95, 45))
        self.btn_seven = wx.Button(parent=panel, id=7, label='7', pos=(10, 80), size=(45, 45))
        self.btn_eight = wx.Button(parent=panel, id=8, label='8', pos=(60, 80), size=(45, 45))
        self.btn_nine = wx.Button(parent=panel, id=9, label='9', pos=(110, 80), size=(45, 45))
        self.btn_six = wx.Button(parent=panel, id=6, label='6', pos=(110, 130), size=(45, 45))
        self.btn_five = wx.Button(parent=panel, id=5, label='5', pos=(60, 130), size=(45, 45))
        self.btn_four = wx.Button(parent=panel, id=4, label='4', pos=(10, 130), size=(45, 45))
        self.btn_three = wx.Button(parent=panel, id=3, label='3', pos=(110, 180), size=(45, 45))
        self.btn_two = wx.Button(parent=panel, id=2, label='2', pos=(60, 180), size=(45, 45))
        self.btn_one = wx.Button(parent=panel, id=1, label='1', pos=(10, 180), size=(45, 45))
        #创建捆绑事件
        self.btn_one.Bind(wx.EVT_BUTTON, self.On_Btn_one, self.btn_one)
        self.btn_two.Bind(wx.EVT_BUTTON, self.On_Btn_two, self.btn_two)
        self.btn_three.Bind(wx.EVT_BUTTON, self.On_Btn_three, self.btn_three)
        self.btn_four.Bind(wx.EVT_BUTTON, self.On_Btn_four, self.btn_four)
        self.btn_five.Bind(wx.EVT_BUTTON, self.On_Btn_five, self.btn_five)
        self.btn_six.Bind(wx.EVT_BUTTON, self.On_Btn_six, self.btn_six)
        self.btn_seven.Bind(wx.EVT_BUTTON, self.On_Btn_seven, self.btn_seven)
        self.btn_eight.Bind(wx.EVT_BUTTON, self.On_Btn_eight, self.btn_eight)
        self.btn_nine.Bind(wx.EVT_BUTTON, self.On_Btn_nine, self.btn_nine)
        self.btn_zero.Bind(wx.EVT_BUTTON, self.On_Btn_zero, self.btn_zero)
        self.btn_divide.Bind(wx.EVT_BUTTON, self.On_Btn_divide, self.btn_divide)
        self.btn_clear.Bind(wx.EVT_BUTTON, self.On_Btn_clear, self.btn_clear)
        self.btn_multiply.Bind(wx.EVT_BUTTON, self.On_Btn_multiply, self.btn_multiply)
        self.btn_backspace.Bind(wx.EVT_BUTTON, self.On_Btn_backspace, self.btn_backspace)
        self.btn_sub.Bind(wx.EVT_BUTTON, self.On_Btn_sub, self.btn_sub)
        self.btn_add.Bind(wx.EVT_BUTTON, self.On_Btn_add, self.btn_add)
        self.btn_equal.Bind(wx.EVT_BUTTON, self.On_Btn_equal, self.btn_equal)
        self.btn_point.Bind(wx.EVT_BUTTON, self.On_Btn_point, self.btn_point)

#创建按钮点击事件
    def On_Btn_one(self,event):
        self.entry.AppendText("1")
    def On_Btn_two(self, event):
        self.entry.AppendText("2")
    def On_Btn_three(self, event):
        self.entry.AppendText("3")
    def On_Btn_four(self, event):
        self.entry.AppendText("4")
    def On_Btn_five(self, event):
        self.entry.AppendText("5")
    def On_Btn_six(self, event):
        self.entry.AppendText("6")
    def On_Btn_seven(self, event):
        self.entry.AppendText("7")
    def On_Btn_eight(self, event):
        self.entry.AppendText("8")
    def On_Btn_nine(self, event):
        self.entry.AppendText("9")
    def On_Btn_zero(self, event):
        self.entry.AppendText("0")
    def On_Btn_point(self, event):
        self.entry.AppendText(".")
    def On_Btn_add(self, event):
        self.entry.AppendText("+")
    def On_Btn_sub(self, event):
        self.entry.AppendText("-")
    def On_Btn_multiply(self, event):
        self.entry.AppendText("*")
    def On_Btn_divide(self, event):
        self.entry.AppendText("/")
    def On_Btn_clear(self, event):
        self.entry.Clear()
    def On_Btn_backspace(self, event):
        input_len = len(self.entry.GetValue())
        self.entry.Remove(input_len - 1, input_len)
    def On_Btn_equal(self,event):
        try:
            pre_result = str(self.entry.GetValue())
            result = eval(pre_result)
            self.entry.SetValue(str(result))
        except:
            self.entry.SetValue("Error")


if __name__ == '__main__':
    app = wx.App()
    MyFrame(None).Show()
    app.MainLoop()

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值