与wx gui的应用程序正忙着崩溃

时间:2013-01-21 11:11:03

标签: python multithreading wxpython

首先抱歉我的英语。

我使用Agilent进行测量。 我写了一些高级函数来简单地完成它。 现在我想在测量过程中绘制结果。 我使用wxPythonmatplotlib

我的代码(简化):

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或我的应用程序。

0 个答案:

没有答案