首先对不起我的英语。
我用我的Agilent
. 我写了一些高级函数来简单地做到这一点。现在我想在测量过程中绘制结果。我使用wxPython
和matplotlib
。
我的代码(简化):
class MyInstr():
def __measurement(self, start, step, stop, plt, result):
if plt:
app = wx.PySimpleApp()
app.f = MeasGraph(result)
app.f.Show()
def st(app):
app.MainLoop()
th = threading.Thread(target=st, args=(app,))
th.start()
for ...
get_data():
...
result.append(new_data)
app.f.redraw_plot(result)
def bsweep(self, start, step, stop, plt=True):
result = {'info': {}, 'prim': [], 'sec': [], 'swp:' []}
self.__measurement(start, step, stop, plt, result)
class MeasGraph(wx.Frame):
def __init__(self, result):
self.data = result
wx.Frame.__init__(self, None, -1, 'Measurement Result')
self.create_main_panel()
def create_main_panel(self):
self.panel = wx.Panel(self)
self.init_plot()
self.canvas = FigureCanvas(self.panel, -1, self.fig)
self.vbox = wx.BoxSizer(wx.VERTICAL)
self.vbox.Add(self.canvas, 1, flag=wx.LEFT | wx.TOP | wx.GROW)
self.panel.SetSizer(self.vbox)
self.vbox.Fit(self)
def init_plot(self):
self.fig = Figure()
self.axes = self.fig.add_subplot(111)
self.primary = self.axes.plot([0], [0])[0]
def redraw_plot(self, result):
self.data = result
self.primary.set_xdata(self.data['swp'])
self.primary.set_ydata(self.data['prim'])
self.canvas.draw()
def main():
instr = MyInstr()
instr.bsweep(0, -0.1, -5, plt=True)
除了带有绘图的窗口外,它工作正常。它很忙,当我点击它时,我的应用程序崩溃了。
谢谢你。
UPD 1:好的,但我希望能够多次运行测量,并且我想同时查看所有以前的图和当前图。例如:
instr.bsweep(0, -0.1, -5, plt=True) # measurement (up to 5 Volts) and plot
现在我发现我需要在高达 10 伏的电压下进行测量。因此:
instr.bsweep(0, -0.1, -10, plt=True)
我想将一个情节与另一个情节进行比较。
但我不能这样做,因为以前的情节(如果它将在主线程中)阻塞了我的 shell 或我的应用程序。