许明会的计算机技术主页

Language:C,C++,.NET Framework(C#)
Thinking:Design Pattern,Algorithm,WPF,Windows Internals
Database:SQLServer,Oracle,MySQL,PostSQL
IT:MCITP,Exchange,Lync,Virtualization,CCNP

导航

Python体验(10)-图形界面之计算器

 

 

  1 import wx
  2 class Form(wx.Frame):
  3     def __init__( self, parent, id, title ):
  4         wx.Frame.__init__(self,parent,id,title,wx.DefaultPosition,wx.Size(300, 250))
  5         self.formula = False
  6         menuBar = wx.MenuBar()
  7         mnuFile = wx.Menu()
  8         mnuFile.Append( 22, '&Quit', 'Exit Calculator' )
  9         menuBar.Append( mnuFile, '&File' )
 10         wx.EVT_MENU( self, 22, self.OnClose )
 11         self.SetMenuBar( menuBar )
 12 
 13         self.display = wx.TextCtrl(self, -1, '', style=wx.TE_RIGHT)
 14         gs = wx.GridSizer(5, 4, 3, 3)
 15         gs.AddMany(
 16             [
 17                 (wx.Button(self, 12, '-'), 0, wx.EXPAND),
 18                 (wx.Button(self, 20, 'Cls'), 0, wx.EXPAND),
 19                 (wx.Button(self, 21, 'Bck'), 0, wx.EXPAND),
 20                 (wx.StaticText(self, -1, ''), 0, wx.EXPAND),
 21                 (wx.Button(self, 22, 'Close'), 0, wx.EXPAND),
 22                 (wx.Button(self, 1, '7'), 0, wx.EXPAND),
 23                 (wx.Button(self, 2, '8'), 0, wx.EXPAND),
 24                 (wx.Button(self, 3, '9'), 0, wx.EXPAND),
 25                 (wx.Button(self, 4, '/'), 0, wx.EXPAND),
 26                 (wx.Button(self, 5, '4'), 0, wx.EXPAND),
 27                 (wx.Button(self, 6, '5'), 0, wx.EXPAND),
 28                 (wx.Button(self, 7, '6'), 0, wx.EXPAND),
 29                 (wx.Button(self, 8, '*'), 0, wx.EXPAND),
 30                 (wx.Button(self, 10, '2'), 0, wx.EXPAND),
 31                 (wx.Button(self, 11, '3'), 0, wx.EXPAND),
 32                 (wx.Button(self, 9, '1'), 0, wx.EXPAND),
 33                 (wx.Button(self, 16, '+'), 0, wx.EXPAND),
 34                 (wx.Button(self, 15, '='), 0, wx.EXPAND),
 35                 (wx.Button(self, 14, '.'), 0, wx.EXPAND),
 36                 (wx.Button(self, 13, '0'), 0, wx.EXPAND)
 37             ]
 38         )
 39         sizer = wx.BoxSizer( wx.VERTICAL )
 40         sizer.Add(self.display, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 4)
 41         sizer.Add(gs, 1, wx.EXPAND)
 42         self.SetSizer(sizer)
 43         self.Centre()
 44 
 45         wx.EVT_BUTTON(self, 20, self.OnClear)
 46         wx.EVT_BUTTON(self, 21, self.OnBackspace)
 47         wx.EVT_BUTTON(self, 22, self.OnClose)
 48         wx.EVT_BUTTON(self, 1, self.OnNumber)
 49         wx.EVT_BUTTON(self, 2, self.OnNumber)
 50         wx.EVT_BUTTON(self, 3, self.OnNumber)
 51         wx.EVT_BUTTON(self, 4, self.OnFormula)
 52         wx.EVT_BUTTON(self, 5, self.OnNumber)
 53         wx.EVT_BUTTON(self, 6, self.OnNumber)
 54         wx.EVT_BUTTON(self, 7, self.OnNumber)
 55         wx.EVT_BUTTON(self, 8, self.OnFormula)
 56         wx.EVT_BUTTON(self, 9, self.OnNumber)
 57         wx.EVT_BUTTON(self, 10, self.OnNumber)
 58         wx.EVT_BUTTON(self, 11, self.OnNumber)
 59         wx.EVT_BUTTON(self, 12, self.OnFormula)
 60         wx.EVT_BUTTON(self, 13, self.OnNumber)
 61         wx.EVT_BUTTON(self, 14, self.OnFormula)
 62         wx.EVT_BUTTON(self, 15, self.OnEqual)
 63         wx.EVT_BUTTON(self, 16, self.OnFormula)
 64 
 65     def OnClear(self, event):
 66         self.display.Clear()
 67     def OnBackspace(self, event):
 68         formula = self.display.GetValue()
 69         self.display.Clear()
 70         self.display.SetValue(formula[:-1])
 71     def OnClose(self, event):
 72         self.Close()
 73     def OnEqual(self,event):
 74         if self.formula:
 75             return
 76         formula = self.display.GetValue()
 77         self.formula = True
 78         try:
 79             self.display.Clear()
 80             output = eval(formula)
 81             self.display.AppendText(str(output))
 82         except StandardError:
 83             self.display.AppendText("Error")
 84 
 85     def OnFormula(self,event):
 86         if self.formula:
 87             return
 88         self.display.AppendText(event.EventObject.LabelText)
 89 
 90     def OnNumber(self,event):
 91         if self.formula:
 92             self.display.Clear()
 93             self.formula=False
 94         self.display.AppendText(event.EventObject.LabelText)
 95 
 96 class MyApp(wx.App):
 97     def OnInit(self):
 98         frame = Form(None, -1, "Phoenix Caculator")
 99         frame.Show(True)
100         self.SetTopWindow(frame)
101         return True
102 
103 app = MyApp(0)
104 app.MainLoop()
import wx
class Form(wx.Frame):
    def __init__( self, parent, id, title ):
        wx.Frame.__init__(self,parent,id,title,wx.DefaultPosition,wx.Size(300, 250))
        self.formula = False
        menuBar = wx.MenuBar()
        mnuFile = wx.Menu()
        mnuFile.Append( 22, '&Quit', 'Exit Calculator' )
        menuBar.Append( mnuFile, '&File' )
        wx.EVT_MENU( self, 22, self.OnClose )
        self.SetMenuBar( menuBar )

        self.display = wx.TextCtrl(self, -1, '', style=wx.TE_RIGHT)
        gs = wx.GridSizer(5, 4, 3, 3)
        gs.AddMany(
            [
                (wx.Button(self, 12, '-'), 0, wx.EXPAND),
                (wx.Button(self, 20, 'Cls'), 0, wx.EXPAND),
                (wx.Button(self, 21, 'Bck'), 0, wx.EXPAND),
                (wx.StaticText(self, -1, ''), 0, wx.EXPAND),
                (wx.Button(self, 22, 'Close'), 0, wx.EXPAND),
                (wx.Button(self, 1, '7'), 0, wx.EXPAND),
                (wx.Button(self, 2, '8'), 0, wx.EXPAND),
                (wx.Button(self, 3, '9'), 0, wx.EXPAND),
                (wx.Button(self, 4, '/'), 0, wx.EXPAND),
                (wx.Button(self, 5, '4'), 0, wx.EXPAND),
                (wx.Button(self, 6, '5'), 0, wx.EXPAND),
                (wx.Button(self, 7, '6'), 0, wx.EXPAND),
                (wx.Button(self, 8, '*'), 0, wx.EXPAND),
                (wx.Button(self, 10, '2'), 0, wx.EXPAND),
                (wx.Button(self, 11, '3'), 0, wx.EXPAND),
                (wx.Button(self, 9, '1'), 0, wx.EXPAND),
                (wx.Button(self, 16, '+'), 0, wx.EXPAND),
                (wx.Button(self, 15, '='), 0, wx.EXPAND),
                (wx.Button(self, 14, '.'), 0, wx.EXPAND),
                (wx.Button(self, 13, '0'), 0, wx.EXPAND)
            ]
        )
        sizer = wx.BoxSizer( wx.VERTICAL )
        sizer.Add(self.display, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 4)
        sizer.Add(gs, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.Centre()

        wx.EVT_BUTTON(self, 20, self.OnClear)
        wx.EVT_BUTTON(self, 21, self.OnBackspace)
        wx.EVT_BUTTON(self, 22, self.OnClose)
        wx.EVT_BUTTON(self, 1, self.OnNumber)
        wx.EVT_BUTTON(self, 2, self.OnNumber)
        wx.EVT_BUTTON(self, 3, self.OnNumber)
        wx.EVT_BUTTON(self, 4, self.OnFormula)
        wx.EVT_BUTTON(self, 5, self.OnNumber)
        wx.EVT_BUTTON(self, 6, self.OnNumber)
        wx.EVT_BUTTON(self, 7, self.OnNumber)
        wx.EVT_BUTTON(self, 8, self.OnFormula)
        wx.EVT_BUTTON(self, 9, self.OnNumber)
        wx.EVT_BUTTON(self, 10, self.OnNumber)
        wx.EVT_BUTTON(self, 11, self.OnNumber)
        wx.EVT_BUTTON(self, 12, self.OnFormula)
        wx.EVT_BUTTON(self, 13, self.OnNumber)
        wx.EVT_BUTTON(self, 14, self.OnFormula)
        wx.EVT_BUTTON(self, 15, self.OnEqual)
        wx.EVT_BUTTON(self, 16, self.OnFormula)

    def OnClear(self, event):
        self.display.Clear()
    def OnBackspace(self, event):
        formula = self.display.GetValue()
        self.display.Clear()
        self.display.SetValue(formula[:-1])
    def OnClose(self, event):
        self.Close()
    def OnEqual(self,event):
        if self.formula:
            return
        formula = self.display.GetValue()
        self.formula = True
        try:
            self.display.Clear()
            output = eval(formula)
            self.display.AppendText(str(output))
        except StandardError:
            self.display.AppendText("Error")

    def OnFormula(self,event):
        if self.formula:
            return
        self.display.AppendText(event.EventObject.LabelText)

    def OnNumber(self,event):
        if self.formula:
            self.display.Clear()
            self.formula=False
        self.display.AppendText(event.EventObject.LabelText)

class MyApp(wx.App):
    def OnInit(self):
        frame = Form(None, -1, "Phoenix Caculator")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp(0)
app.MainLoop()

 

posted on 2016-03-21 00:58  许明会  阅读(1798)  评论(0编辑  收藏  举报