学生制作,简单易懂的python wx库计算器
前言
十分容易理解,适合和我一样的初学者(其实是老师布置的课后作业),如果是搜题进来的同学,希望能先试着阅读理解一遍,我在网上也搜过题,都写的很复杂,而我自己做的既没有异常处理,又没有额外的什么菜单、颜色,结构清晰明了,无疑是最适合学生的!
import wx
import math
class mainframe(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent,id=-1,title="Python计算器",size=(500,600))
panel = wx.Panel(self)
# 显示屏
self.screen = wx.TextCtrl(parent=panel,pos=(45,20),size=(400,100),style=wx.TE_READONLY)
font1=wx.Font('100')
self.screen.SetFont(font1)
self.result=""
# 创建按钮并绑定事件
# 第一排按钮
self.btn_power = wx.Button(parent=panel, label='x乘y次方', pos=(45, 180), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_power, self.btn_power)
self.btn_root = wx.Button(parent=panel, label='x开y次根', pos=(145, 180), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_root, self.btn_root)
self.btn_sin = wx.Button(parent=panel, label='sin( )', pos=(245, 180), size=(42, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_sin, self.btn_sin)
self.btn_cos = wx.Button(parent=panel, label='cos( )', pos=(291, 180), size=(42, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_cos, self.btn_cos)
self.btn_leftbra = wx.Button(parent=panel, label='(', pos=(355, 180), size=(42, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_leftbra, self.btn_leftbra)
self.btn_rightbra = wx.Button(parent=panel, label=')', pos=(401, 180), size=(42, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_rightbra, self.btn_rightbra)
# 第二排按钮
self.btn_clean = wx.Button(parent=panel, label='清空', pos=(45, 240), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_clean, self.btn_clean)
self.btn_div = wx.Button(parent=panel, label='÷', pos=(145, 240), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_div, self.btn_div)
self.btn_mul = wx.Button(parent=panel, label='×', pos=(245, 240), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_mul, self.btn_mul)
self.btn_back = wx.Button(parent=panel, label='退格', pos=(355, 240), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_back, self.btn_back)
# 第三排按钮
self.btn_7 = wx.Button(parent=panel, label='7', pos=(45, 300), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_7, self.btn_7)
self.btn_8 = wx.Button(parent=panel, label='8', pos=(145, 300), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_8, self.btn_8)
self.btn_9 = wx.Button(parent=panel, label='9', pos=(245, 300), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_9, self.btn_9)
self.btn_sub = wx.Button(parent=panel, label='-', pos=(355, 300), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_sub, self.btn_sub)
# 第四排按钮
self.btn_4 = wx.Button(parent=panel, label='4', pos=(45, 360), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_4, self.btn_4)
self.btn_5 = wx.Button(parent=panel, label='5', pos=(145, 360), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_5, self.btn_5)
self.btn_6 = wx.Button(parent=panel, label='6', pos=(245, 360), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_6, self.btn_6)
self.btn_add = wx.Button(parent=panel, label='+', pos=(355, 360), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_add, self.btn_add)
# 第五排按钮
self.btn_1 = wx.Button(parent=panel, label='1', pos=(45, 420), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_1, self.btn_1)
self.btn_2 = wx.Button(parent=panel, label='2', pos=(145, 420), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_2, self.btn_2)
self.btn_3 = wx.Button(parent=panel, label='3', pos=(245, 420), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_3, self.btn_3)
self.btn_equal = wx.Button(parent=panel, label='=', pos=(355, 420), size=(88, 105))
self.Bind(wx.EVT_BUTTON, self.On_btn_equal, self.btn_equal)
# 第六排按钮
self.btn_percent = wx.Button(parent=panel, label='%', pos=(45, 480), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_percent, self.btn_percent)
self.btn_0 = wx.Button(parent=panel, label='0', pos=(145, 480), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_0, self.btn_0)
self.btn_point = wx.Button(parent=panel, label='.', pos=(245, 480), size=(88, 45))
self.Bind(wx.EVT_BUTTON, self.On_btn_point, self.btn_point)
# 按钮事件方法
# 第一排按钮
def On_btn_power(self, event):
self.result = self.result + "**"
self.screen.SetValue(self.result)
def On_btn_root(self, event):
self.result = self.result + "**1/"
self.screen.SetValue(self.result)
def On_btn_sin(self, event):
self.result = "math.sin("+ self.result + ")"
self.screen.SetValue(self.result)
def On_btn_cos(self, event):
self.result = "math.cos("+ self.result + ")"
self.screen.SetValue(self.result)
def On_btn_leftbra(self, event):
self.result = self.result + "("
self.screen.SetValue(self.result)
def On_btn_rightbra(self, event):
self.result = self.result + ")"
self.screen.SetValue(self.result)
# 第二排按钮
def On_btn_clean(self, event):
self.result = ""
self.screen.SetValue(self.result)
def On_btn_div(self, event):
self.result = self.result + "/"
self.screen.SetValue(self.result)
def On_btn_mul(self, event):
self.result = self.result + "*"
self.screen.SetValue(self.result)
def On_btn_back(self, event):
self.result = self.result[0:-1]
self.screen.SetValue(self.result)
# 第三排按钮
def On_btn_7(self, event):
self.result = self.result + "7"
self.screen.SetValue(self.result)
def On_btn_8(self, event):
self.result = self.result + "8"
self.screen.SetValue(self.result)
def On_btn_9(self, event):
self.result = self.result + "9"
self.screen.SetValue(self.result)
def On_btn_sub(self, event):
self.result = self.result + "-"
self.screen.SetValue(self.result)
# 第四排按钮
def On_btn_4(self, event):
self.result = self.result + "4"
self.screen.SetValue(self.result)
def On_btn_5(self, event):
self.result = self.result + "5"
self.screen.SetValue(self.result)
def On_btn_6(self, event):
self.result = self.result + "6"
self.screen.SetValue(self.result)
def On_btn_add(self, event):
self.result = self.result + "+"
self.screen.SetValue(self.result)
# 第五排按钮
def On_btn_1(self, event):
self.result = self.result + "1"
self.screen.SetValue(self.result)
def On_btn_2(self, event):
self.result = self.result + "2"
self.screen.SetValue(self.result)
def On_btn_3(self, event):
self.result = self.result + "3"
self.screen.SetValue(self.result)
def On_btn_equal(self, event):
self.result = str(eval(self.result)) #程序的关键,感谢eval()函数
self.screen.SetValue(self.result)
# 第六排按钮
def On_btn_percent(self, event):
self.result = self.result + "%"
self.screen.SetValue(self.result)
def On_btn_0(self, event):
self.result = self.result + "0"
self.screen.SetValue(self.result)
def On_btn_point(self, event):
self.result = self.result + "."
self.screen.SetValue(self.result)
if __name__=='__main__':
app = wx.App()
mainframe(None).Show()
app.MainLoop()