初学Python,从计算器做起。
Python2.5+wxPython
- #!/bin/env python
- # -*- coding: cp936 -*-
- # above for resolve chinese issue
- import wx
- import math
- class MyFrame(wx.Frame):
- def __init__(self):
- wx.Frame.__init__(self, None, -1, "计算器Calculator", size=(270, 250))
- panel = wx.Panel(self, -1)
- self.textBox1 = wx.TextCtrl(panel, -1, "", pos=(40, 10),size=(200,30))
- wx.StaticText(panel, -1, "R:", pos=(10, 12))
- self.button7 = wx.Button(panel, -1, "7", pos=(54, 85),size=(36,26))
- self.button8 = wx.Button(panel, -1, "8", pos=(92, 85),size=(36,26))
- self.button9 = wx.Button(panel, -1, "9", pos=(132,85),size=(36,26))
- self.button4 = wx.Button(panel, -1, "4", pos=(54, 116),size=(36,26))
- self.button5 = wx.Button(panel, -1, "5", pos=(92, 116),size=(36,26))
- self.button6 = wx.Button(panel, -1, "6", pos=(132,116),size=(36,26))
- self.button1 = wx.Button(panel, -1, "1", pos=(54, 147),size=(36,26))
- self.button2 = wx.Button(panel, -1, "2", pos=(92, 147),size=(36,26))
- self.button3 = wx.Button(panel, -1, "3", pos=(132, 147),size=(36,26))
- self.button0 = wx.Button(panel, -1, "0", pos=(54, 178),size=(36,26))
- self.buttonplusorminus = wx.Button(panel, -1, "+/-", pos=(92, 178),size=(36,26))
- self.buttondot = wx.Button(panel, -1, ".", pos=(132, 178),size=(36,26))
- self.buttonmul = wx.Button(panel, -1, "*", pos=(171, 85),size=(36,26))
- self.buttondiv = wx.Button(panel, -1, "/", pos=(171, 116),size=(36,26))
- self.buttonminus = wx.Button(panel, -1, "-", pos=(171, 147),size=(36,26))
- self.buttonplus = wx.Button(panel, -1, "+", pos=(171, 178),size=(36,26))
- self.buttonsqrt = wx.Button(panel, -1, "sqrt", pos=(211, 85),size=(36,26))
- self.buttonpercent = wx.Button(panel, -1, "%", pos=(211, 116),size=(36,26))
- self.buttonrev = wx.Button(panel, -1, "1/x", pos=(211, 147),size=(36,26))
- self.buttonequal = wx.Button(panel, -1, "=", pos=(211, 178),size=(36,26))
- self.buttoncancel = wx.Button(panel, -1, "C", pos=(200, 54),size=(47,26))
- self.button1.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button2.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button3.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button4.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button5.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button6.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button7.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button8.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button9.Bind(wx.EVT_BUTTON, self.OnClick)
- self.button0.Bind(wx.EVT_BUTTON, self.OnClick)
- self.buttondot.Bind(wx.EVT_BUTTON, self.OnClick)
- self.buttonmul.Bind(wx.EVT_BUTTON, self.OnClick)
- self.buttondiv.Bind(wx.EVT_BUTTON, self.OnClick)
- self.buttonminus.Bind(wx.EVT_BUTTON, self.OnClick)
- self.buttonplus.Bind(wx.EVT_BUTTON, self.OnClick)
- self.buttonequal.Bind(wx.EVT_BUTTON, self.OnCompute)
- self.buttonsqrt.Bind(wx.EVT_BUTTON, self.OnSqrt)
- self.buttonrev.Bind(wx.EVT_BUTTON, self.OnRev)
- self.buttonpercent.Bind(wx.EVT_BUTTON, self.OnPert)
- self.buttoncancel.Bind(wx.EVT_BUTTON, self.OnCancel)
- self.buttonequal.SetDefault()
- def OnClick(self, event):
- self.textBox1.SetValue(self.textBox1.GetValue()+event.GetEventObject().GetLabel())
- def OnCompute(self, event):
- if self.textBox1.GetValue() != '':
- self.textBox1.SetValue(str(eval(self.textBox1.GetValue())))
- def OnSqrt(self, event):
- self.textBox1.SetValue(str(math.sqrt(eval(self.textBox1.GetValue()))))
- def OnRev(self, event):
- self.textBox1.SetValue(str(1.0/(eval(self.textBox1.GetValue()))))
- def OnPert(self, event):
- self.textBox1.SetValue(str((eval(self.textBox1.GetValue()))/100.0))
- def OnCancel(self, event):
- self.textBox1.SetValue("")
- if __name__ == '__main__':
- print ("Start")
- app = wx.PySimpleApp()
- frame = MyFrame()
- frame.Show(True)
- app.MainLoop()