Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有wx gui的应用程序正忙并崩溃_Python_Multithreading_Wxpython - Fatal编程技术网

Python 带有wx gui的应用程序正忙并崩溃

Python 带有wx gui的应用程序正忙并崩溃,python,multithreading,wxpython,Python,Multithreading,Wxpython,首先为我的英语感到抱歉 我用安捷伦进行测量。 我编写了一些高级函数来简单地实现它。 现在我想在测量过程中绘制结果。 我使用wxPython和matplotlib 我的代码(简化): class MyInstr(): def测量(自身、启动、步进、停止、plt、结果): 如果plt: app=wx.PySimpleApp() 附录f=测量图(结果) 附录f.Show() def st(应用程序): app.MainLoop() threading.Thread(target=st,args=(ap

首先为我的英语感到抱歉

我用安捷伦进行测量。 我编写了一些高级函数来简单地实现它。 现在我想在测量过程中绘制结果。 我使用
wxPython
matplotlib

我的代码(简化):

class MyInstr():
def测量(自身、启动、步进、停止、plt、结果):
如果plt:
app=wx.PySimpleApp()
附录f=测量图(结果)
附录f.Show()
def st(应用程序):
app.MainLoop()
threading.Thread(target=st,args=(app,))
th.start()
对于
获取数据():
...
结果.追加(新的_数据)
附录f.重绘图(结果)
def bsweep(自、启动、步进、停止、plt=True):
结果={'info':{},'prim':[],'sec':[],'swp:'[]}
自我测量(启动、步进、停止、plt、结果)
等级测量图(wx.框架):
定义初始(自我,结果):
self.data=结果
wx.Frame.\uuuu init\uuuuu(self,None,-1,‘测量结果’)
self.create_主面板()
def创建主面板(自):
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初始图(自):
self.fig=图()
self.axes=self.fig.add_子批次(111)
self.primary=self.axes.plot([0],[0])[0]
def重绘图(自身、结果):
self.data=结果
self.primary.set_扩展数据(self.data['swp']))
self.primary.set_ydata(self.data['prim']))
self.canvas.draw()
def main():
instr=MyInstr()
仪表bsweep(0,-0.1,-5,plt=True)
除了带有绘图的窗口外,它工作正常。它很忙,当我点击它时,我的应用程序崩溃了

多谢各位


UPD 1:正常,但我希望能够多次运行测量,并希望同时查看所有以前的绘图和当前绘图。 例如:

instr.bsweep(0,-0.1,-5,plt=True)#测量(高达5伏)和绘图
现在我知道我需要测量10伏的电压。因此:

instr.bsweep(0,-0.1,-10,plt=True)
我想比较一个情节和另一个情节


但是我不能这样做,因为之前的绘图(如果它将在主线程中)会阻止我的shell或我的应用程序。

一个问题是,你正在线程中运行wx MainLoop,你需要在主线程中运行它-你可能会发现,更改可以解决你的问题