class Main_Panel(wx.Panel): #This is where all widgets are going to be placed def __init__(self, parent): wx.Panel.__init__(self, parent) self.statusLabels = ["\tStatus_Box", "File: None", "Has_Data: False", "PlotType: Scatter", "xLabel: None", "yLabel: None", "xLimit: None", "yLimit: None"] self.parent = parent self.style = 'Scatter' self.x_axis_label = None self.y_axis_label = None self.x_axis_range = [0,1] self.y_axis_range = [0,1] self.graph = Graph(self) #Graph Object self.yLimit = Axis_Range(self, wx.HORIZONTAL) #Axis Object self.xLimit = Axis_Range(self, wx.VERTICAL) #Axis Object self.Labels = Axis_Labels(self) #Axis Object self.status = wx.ListBox(self, choices=self.statusLabels) self.plotType = wx.RadioBox(self, label='Graph Style', choices=['Scatter', 'Line', 'Bar'], style=wx.RA_SPECIFY_ROWS) self.plotType.Bind(wx.EVT_RADIOBOX, self.updateStyle) sizer = wx.BoxSizer(wx.VERTICAL) space = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) hbox2 = wx.BoxSizer(wx.HORIZONTAL) vbox = wx.BoxSizer(wx.HORIZONTAL) hbox1.Add(self.yLimit, proportion=1, flag=wx.EXPAND) hbox1.Add(self.graph.addObj(), proportion=14, flag=wx.EXPAND) sizer.Add(hbox1, proportion=6, flag=wx.EXPAND) hbox2.Add(space, proportion=1, flag=wx.EXPAND) hbox2.Add(self.xLimit, proportion=14, flag=wx.EXPAND) vbox.Add(self.status, proportion=1, flag=wx.EXPAND) vbox.Add(self.plotType, proportion=1, flag=wx.EXPAND) vbox.Add(self.Labels, proportion=2, flag=wx.EXPAND) sizer.Add(hbox2, proportion=1, flag=wx.EXPAND) sizer.Add(vbox, proportion=4, border=40, flag=wx.EXPAND|wx.LEFT|wx.RIGHT) self.SetSizer(sizer) self.Fit() def updateStyle(self, evt): self.style = evt.EventObject.GetStringSelection() self.updateGraphParameters() def updateGraphParameters(self): self.updateStatus("Plot", self.style) self.updateStatus("xLabel", str(self.x_axis_label)) self.updateStatus("yLabel", str(self.y_axis_label)) self.updateStatus("xLimit",str(self.xLimit.getRange())) self.updateStatus("yLimit",str(self.yLimit.getRange())) self.graph.setFile(self.getFile()) self.graph.setPlotType(self.style) self.graph.setXlabel(self.x_axis_label) self.graph.setYlabel(self.y_axis_label) self.graph.setXrange(self.xLimit.getRange()) self.graph.setYrange(self.yLimit.getRange()) if self.graph.canPlot(): self.graph.updatePlot() def updatePlot(self): pass def updateStatus(self, parameter, label): key = self.getKey() assert(parameter in key.keys()), "Parameter needs to be " + str(key.keys()) self.status.SetString(self.status.FindString(key[parameter]), key[parameter].split(' ')[0] + ' ' + label) def getKey(self): return {"File":self.status.GetString(1), "Data":self.status.GetString(2), "Plot":self.status.GetString(3), "xLabel":self.status.GetString(4), "yLabel":self.status.GetString(5), "xLimit":self.status.GetString(6), "yLimit": self.status.GetString(7)} def getFile(self): return self.parent.currentFile