class plot(wx.Frame): #---------------------------------------------------------------------- def __init__(self, grafica): wx.Frame.__init__(self, None, wx.ID_ANY, 'Grafica de resultados') panel = wx.Panel(self, wx.ID_ANY) mainSizer = wx.BoxSizer(wx.VERTICAL) checkSizer = wx.BoxSizer(wx.HORIZONTAL) self.canvas = PlotCanvas(panel) self.canvas.SetShowScrollbars(True) self.canvas.SetEnableZoom(True) self.canvas.Draw(grafica) toggleGrid = wx.CheckBox(panel, label="Ver cuadricula") toggleGrid.Bind(wx.EVT_CHECKBOX, self.onToggleGrid) toggleLegend = wx.CheckBox(panel, label="Ver leyenda") toggleLegend.Bind(wx.EVT_CHECKBOX, self.onToggleLegend) mainSizer.Add(self.canvas, 1, wx.EXPAND) checkSizer.Add(toggleGrid, 0, wx.ALL, 5) checkSizer.Add(toggleLegend, 0, wx.ALL, 5) mainSizer.Add(checkSizer) panel.SetSizer(mainSizer) def onToggleGrid(self, event): self.canvas.Reset() self.canvas.SetEnableGrid(event.IsChecked()) def onToggleLegend(self, event): self.canvas.SetEnableLegend(event.IsChecked()) def dibujar(self): app = wx.App(False) self.Show() app.MainLoop()
class PanelGraph(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) self.ancestor = parent self.fontpointsize=wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT).GetPointSize() self.colour = wx.Colour(30,70,115, alpha=wx.ALPHA_OPAQUE) self.canvas = PlotCanvas(self) if IsNotWX4(): self.canvas.SetInitialSize(size=self.GetClientSize()) self.canvas.SetShowScrollbars(True) self.canvas.SetEnableZoom(False) self.canvas.SetFontSizeAxis(point=12) self.canvas.SetFontSizeTitle(point=12) self.canvas.SetGridColour(wx.Colour(0, 0, 0)) self.canvas.SetForegroundColour(wx.Colour(0, 0, 0)) self.canvas.SetBackgroundColour(wx.Colour(255, 255, 255)) else: self.canvas.axesPen = wx.Pen(self.colour, width=1, style=wx.PENSTYLE_SOLID) self.canvas.SetForegroundColour(wx.Colour(0, 0, 0)) self.canvas.SetBackgroundColour(wx.Colour(255, 255, 255)) self.canvas.enableGrid = (True,True) self.canvas.fontSizeAxis = self.fontpointsize self.canvas.fontSizeTitle = self.fontpointsize self.vbox = wx.BoxSizer(wx.VERTICAL) self.vbox.Add(self.canvas, 1, flag=wx.LEFT | wx.TOP | wx.GROW) self.paused = False self.hbox_btn = wx.BoxSizer(wx.HORIZONTAL) self.hbox_btn.AddSpacer(20) self.button_pause =wx.Button(self, label="Pause Graph") self.Bind(wx.EVT_BUTTON, self.OnClickPauseButton, self.button_pause) self.hbox_btn.Add(self.button_pause) self.button_save =wx.Button(self, label="Save Data") self.Bind(wx.EVT_BUTTON, self.OnClickSaveButton, self.button_save) self.hbox_btn.Add(self.button_save) self.vbox.Add(self.hbox_btn, 0, wx.EXPAND) self.SetSizer(self.vbox) self.Fit() self.Show() self.data_poll_timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.UpdateGraph, self.data_poll_timer) def OnClickPauseButton(self, event): self.paused = not self.paused label = "Resume" if self.paused else "Pause Graph" if self.paused == True: if IsNotWX4(): self.canvas.SetEnableZoom(True) else: self.canvas.enableZoom = True else: if IsNotWX4(): self.canvas.SetEnableZoom(False) else: self.canvas.enableZoom = False self.button_pause.SetLabel(label) def OnClickSaveButton(self, event): data_length = self.ancestor.GetPage(0).citer_flow[0] if data_length > 0: self.ancestor.GetPage(0).OnClickPause(self.ancestor.GetPage(0)) x = numpy.arange(data_length) y = self.ancestor.GetPage(0).residual[:data_length] xy = numpy.vstack((x,y)).T datestr = strftime("%Y-%m-%d_%H.%M.%S") numpy.savetxt('Residual_'+datestr+'.csv', xy, delimiter=',') self.ancestor.GetPage(0).OnClickPause(self.ancestor.GetPage(0)) def UpdateGraph(self,event): if self.ancestor.GetPage(0).citer_flow[1] == 2: self.data_poll_timer.Stop() return if self.ancestor.GetPage(0).pipeline_started == True and self.paused != True: try: data_length = self.ancestor.GetPage(0).citer_flow[0] x = numpy.arange(data_length) y = self.ancestor.GetPage(0).residual[:data_length] data = numpy.vstack((x,y)).T line = PolyLine(data, colour=self.colour, width=2.5) graphic = PlotGraphics([line],"Error Residual", " Iteration", "Residual") self.canvas.Draw(graphic, xAxis=(0, data_length), yAxis=(0.0, 1.2)) except: pass
def build(self, panel): hboxMain = wx.BoxSizer(wx.HORIZONTAL) vboxInput = wx.BoxSizer(wx.VERTICAL) # horizontal box containing labels for index including date (from-to) hboxIndexLabel = wx.BoxSizer(wx.HORIZONTAL) hboxIndexLabel.Add(wx.StaticText(panel, label='Index'), flag=wx.RIGHT, border=81) hboxIndexLabel.Add(wx.StaticText(panel, label='Begin'), flag=wx.RIGHT, border=70) hboxIndexLabel.Add(wx.StaticText(panel, label='Ende')) vboxInput.Add(hboxIndexLabel, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border=10) # horizontal box containing value-fields for index including date (from-to) hboxIndexValue = wx.BoxSizer(wx.HORIZONTAL) self.ctrl_stock_name = wx.TextCtrl(panel) hboxIndexValue.Add(self.ctrl_stock_name, flag=wx.RIGHT, border=8) self.ctrl_stock_start = wx.DatePickerCtrl(panel, -1, style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) hboxIndexValue.Add(self.ctrl_stock_start) self.ctrl_stock_end = wx.DatePickerCtrl(panel, -1, style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) hboxIndexValue.Add(self.ctrl_stock_end) vboxInput.Add(hboxIndexValue, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=10) # fetch button self.btn_update_index = wx.Button(panel, label="Fetch Index") vboxInput.Add(self.btn_update_index, flag=wx.ALL, border=5) self.btn_process = wx.Button(panel, label="Process") vboxInput.Add(self.btn_process, flag=wx.ALL, border=5) vboxInput.Add((-1, 10)) # space between index and trader # trader options vboxTraderLeft = wx.BoxSizer(wx.VERTICAL) self.ctrl_trader_mode = wx.ComboBox(panel, choices=TRADER_MODES, style=wx.CB_READONLY) vboxTraderLeft.Add(wx.StaticText(panel, label='Trader'), flag=wx.ALL, border=5) vboxTraderLeft.Add(self.ctrl_trader_mode, flag=wx.ALL, border=5) vboxTraderRight = wx.BoxSizer(wx.VERTICAL) hboxTraderToggles = wx.BoxSizer(wx.HORIZONTAL) self.ctrl_dynamic = wx.CheckBox(panel, label="dynamic") self.ctrl_reverse = wx.CheckBox(panel, label="reverse") self.ctrl_initial_funds = wx.lib.intctrl.IntCtrl(panel) hboxTraderToggles.Add(self.ctrl_dynamic, flag=wx.ALL, border=5) hboxTraderToggles.Add(self.ctrl_reverse, flag=wx.ALL, border=5) vboxTraderRight.Add(hboxTraderToggles, flag=wx.ALL, border=5) vboxTraderRight.Add(self.ctrl_initial_funds, flag=wx.ALL, border=5) vboxTraderOptions = wx.BoxSizer(wx.HORIZONTAL) vboxTraderOptions.Add(vboxTraderLeft) vboxTraderOptions.Add(vboxTraderRight) vboxInput.Add(vboxTraderOptions, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=10) # horizontal box containing labels for trendindicator vboxInput.Add(self.indicator1, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border=10) vboxInput.Add(self.indicator2, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border=10) # panel for plotting the graph vboxOutput = wx.BoxSizer(wx.VERTICAL) canvas = PlotCanvas(panel) canvas.SetEnableLegend(True) canvas.SetEnableDrag(True) canvas.SetShowScrollbars(True) canvas.SetEnableZoom(True) canvas.SetEnableAntiAliasing(True) self.canvas = canvas self.text_out = wx.StaticText(panel, label="no text") vboxOutput.Add(self.canvas, 3, flag=wx.EXPAND) vboxOutput.Add(self.text_out, 1) # sizer for entire frame hboxMain.Add(vboxInput) hboxMain.Add(vboxOutput, 1, flag=wx.EXPAND) panel.SetSizer(hboxMain)