Я пишу GUI, чтобы получить информацию по очереди, а затем построить пошаговый график с полученной информацией по мере поступления. Контейнеры заполняются информацией, но мой график не обновляется. Вот фрагмент кода, который я использую.
class bottomRight(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
# INITIALIZE RIGHT PANEL PLOT
self.counts = np.zeros(240) #240 bins
#self.energyBins = np.linspace(0,15000,240) #expecting max energy of 1.8 MeV
self.energyBins = np.linspace(0,1.8,240)
self.initSpectrum()
def initSpectrum(self):
plt.ion()
self.figureMAW = Figure()
self.axes = self.figureMAW.add_subplot(111)#.gca()
self.canvas = FigureCanvas(self, -1, self.figureMAW)
self.figureMAW.set_size_inches(8, 5)
self.sizerMAW = wx.BoxSizer(wx.HORIZONTAL)
self.sizerMAW.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(self.sizerMAW)
self.plotMAWData = self.axes.step(
self.energyBins, self.counts)[0]
self.axes.set_xlabel('ADC Value')
self.axes.set_ylabel('Counts')
def plotADC(self,adc):
'''
Window shouldn't clear everytime this function is called.
It should just add counts to the counts array.
Testing this feature with a try-except statement.
'''
for z in range(len(adc)):
try:
bins = 15000/240#1.8/240
self.counts[int(((adc[z])//bins))] += 1 #7.5 keV bins
except:
break
self.axes.cla()
print('counts = ', self.counts)
self.plotADCData = self.axes.step(
self.energyBins, self.counts)
self.canvas.draw()
class GUI(wx.Frame):
def __init__(self):
self.main = wx.Frame#.__init__(self, None, wx.ID_ANY, "GUI", size=(1200,650))
self.main.__init__(self, None, wx.ID_ANY, "GUI", size=(1200,650))
# DEFINE A SPLIT WINDOW FOR PLOTTING
self.splitWin = wx.SplitterWindow(self)
topP = topPanel(self)
self.lp = bottomLeft(self.splitWin)
self.rp = bottomRight(self.splitWin)
def onAcquire(self,e):
while True:
message = receive_queue_data()
#print(message)
if message is not None:
print(message['data']['gate2'])
adc = np.array(message['data']['gate2'])
#print('adc = ', adc)
self.rp.plotADC(adc)
if __name__ == "__main__":
app = wx.App(False)
frame = GUI()
frame.Show()
app.MainLoop()
frame.Refresh()
Почему в моем While
l oop не вызывается обновление графика каждый раз, когда self.rp.plotADC(adc)
вызывается? Спасибо!