Ecco una calcolatrice programmata in python con interfaccia grafica generata da WxGlade, l’ho fatta tanto tempo fa quando ancora stavo iniziando a creare i miei primi programmi con un interfaccia grafica.
import wx class MyFrame3(wx.Frame): def __init__(self, *args, **kwds): kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) self.cls = wx.Button(self, -1, "Cancella") self.back = wx.Button(self, -1, "Indietro") self.close = wx.Button(self, -1, "Chiudi") self.seven = wx.Button(self, -1, "7") self.eight = wx.Button(self, -1, "8") self.nine = wx.Button(self, -1, "9") self.divide = wx.Button(self, -1, "/") self.four = wx.Button(self, -1, "4") self.five = wx.Button(self, -1, "5") self.six = wx.Button(self, -1, "6") self.multiply = wx.Button(self, -1, "*") self.one = wx.Button(self, -1, "1") self.two = wx.Button(self, -1, "2") self.three = wx.Button(self, -1, "3") self.minus = wx.Button(self, -1, "-") self.zero = wx.Button(self, -1, "0") self.dot = wx.Button(self, -1, ".") self.equal = wx.Button(self, -1, "=") self.plus = wx.Button(self, -1, "+") self.frame_3_menubar = wx.MenuBar() self.files = wx.Menu() self.Quit = wx.MenuItem(self.files, 130, "ChiuditAlt+F4", "", wx.ITEM_NORMAL) self.Quit.SetBitmap(wx.Bitmap('icons/Exit.png')) self.files.AppendItem(self.Quit) self.frame_3_menubar.Append(self.files, "File") self.SetMenuBar(self.frame_3_menubar) self.__set_properties() self.__do_layout() self.formula = False self.Bind(wx.EVT_BUTTON, self.OnCls, self.cls) self.Bind(wx.EVT_BUTTON, self.OnBack, self.back) self.Bind(wx.EVT_BUTTON, self.OnClose, self.close) self.Bind(wx.EVT_BUTTON, self.OnSeven, self.seven) self.Bind(wx.EVT_BUTTON, self.OnEight, self.eight) self.Bind(wx.EVT_BUTTON, self.OnNine, self.nine) self.Bind(wx.EVT_BUTTON, self.OnDivide, self.divide) self.Bind(wx.EVT_BUTTON, self.OnFour, self.four) self.Bind(wx.EVT_BUTTON, self.OnFive, self.five) self.Bind(wx.EVT_BUTTON, self.OnSix, self.six) self.Bind(wx.EVT_BUTTON, self.OnMultiply, self.multiply) self.Bind(wx.EVT_BUTTON, self.OnOne, self.one) self.Bind(wx.EVT_BUTTON, self.OnTwo, self.two) self.Bind(wx.EVT_BUTTON, self.OnThree, self.three) self.Bind(wx.EVT_BUTTON, self.OnMinus, self.minus) self.Bind(wx.EVT_BUTTON, self.OnZero, self.zero) self.Bind(wx.EVT_BUTTON, self.OnDot, self.dot) self.Bind(wx.EVT_BUTTON, self.OnEqual, self.equal) self.Bind(wx.EVT_BUTTON, self.OnPlus, self.plus) self.Bind(wx.EVT_MENU, self.Onquit, self.Quit) def __set_properties(self): self.SetTitle("ShinWorld Calculator") _icon = wx.EmptyIcon() _icon.CopyFromBitmap(wx.Bitmap("icons/OD.ico", wx.BITMAP_TYPE_ANY)) self.SetIcon(_icon) def __do_layout(self): sizer_1 = wx.BoxSizer(wx.VERTICAL) self.display = wx.TextCtrl(self, -1, '', style=wx.TE_RIGHT) sizer_1.Add(self.display, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 4) grid_sizer_1 = wx.GridSizer(4, 4, 3, 3) grid_sizer_1.Add(self.cls, 0, wx.EXPAND, 6) grid_sizer_1.Add(self.back, 0, wx.EXPAND, 6) grid_sizer_1.Add(wx.StaticText(self, -1, ''), 0, wx.EXPAND), grid_sizer_1.Add(self.close, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.seven, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.eight, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.nine, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.divide, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.four, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.five, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.six, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.multiply, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.one, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.two, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.three, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.minus, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.zero, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.dot, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.equal, 0, wx.EXPAND, 0) grid_sizer_1.Add(self.plus, 0, wx.EXPAND, 0) sizer_1.Add(grid_sizer_1, 4, wx.EXPAND|wx.ALIGN_BOTTOM, 0) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout() self.Centre() def OnCls(self, event): self.display.Clear() def OnBack(self, event): formula = self.display.GetValue() self.display.Clear() self.display.SetValue(formula[:-1]) def OnClose(self, event): self.Close() def OnSeven(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('7') def OnEight(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('8') def OnNine(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('9') def OnDivide(self, event): if self.formula: return self.display.AppendText('/') def OnFour(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('4') def OnFive(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('5') def OnSix(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('6') def OnMultiply(self, event): if self.formula: return self.display.AppendText('*') def OnOne(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('1') def OnTwo(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('2') def OnThree(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('3') def OnMinus(self, event): if self.formula: return self.display.AppendText('-') def OnZero(self, event): if self.formula: self.display.Clear() self.formula = False self.display.AppendText('0') def OnDot(self, event): if self.formula: return self.display.AppendText('.') def OnEqual(self, event): if self.formula: return formula = self.display.GetValue() self.formula = False try: self.display.Clear() output = eval(formula) self.display.AppendText(str(output)) except StandardError: dlg = wx.MessageDialog(self, 'Errore durante l'esecuzione!', 'ShinWorld Calculetor', wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() def OnPlus(self, event): if self.formula: return self.display.AppendText('+') def Onquit(self, event): self.Close() class MyApp3(wx.App): def OnInit(self): wx.InitAllImageHandlers() frame_3 = MyFrame3(None, -1, "") self.SetTopWindow(frame_3) frame_3.Show() return 1 if __name__ == "__main__": app3 = MyApp3(0) app3.MainLoop()