我想有一个情节弹出,使用户可以确认一个合适的工作,但不挂断整个过程这么做。 然而,在出现的窗口中,从来就没有了什么东西,它是“没有响应”。 我怀疑存在与子功能的不良相互作用,因为这代码是前结束和用C正在运行一个仿真数据处理++。
import subprocess
import numpy as np
from matplotlib import pyplot as mpl
...
mpl.ion()
fig = mpl.figure()
ax = fig.add_subplot(1,1,1)
ax.grid(True)
ax.plot(x, y, 'g')
ax.scatter(X, Y, c='b')
ax.scatter(min_tilt, min_energy, c='r')
mpl.draw()
...
subprocess.call(prog)
下面的子确实打开。 如果我删除ion()
调用和使用mpl.show()
则积工作正常,但直到窗口被关闭的整个过程举起。 我需要的进程继续,而用户看到的图形。 有没有办法做到这一点?
相反,mpl.draw()的,请尝试:
mpl.pause(0.001)
使用matplotlib交互模式时离子()。 请注意,这只是从matplotlib 1.1.1 RC或更高的工作。
这可能是矫枉过正,但因为没有人有没有更好的办法我去线程模块和它的工作。 如果任何人有一个简单的方法来做到这一点,请让我知道。
import subprocess
import threading
from matplotlib import pyplot as mpl
...
class Graph(threading.Thread):
def __init__(self,X,Y,min_tilt, min_energy):
self.X = X
self.Y = Y
self.min_tilt = min_tilt
self.min_energy = min_energy
threading.Thread.__init__(self)
def run(self):
X = self.X
Y = self.Y
dx = (X.max()-X.min())/30.0
x = np.arange(X.min(),X.max()+dx,dx)
y = quad(x,fit)
fig = mpl.figure()
ax = fig.add_subplot(1,1,1)
ax.grid(True)
ax.plot(x, y, 'g')
ax.scatter(X, Y, c='b')
ax.scatter(self.min_tilt, self.min_energy, c='r')
mpl.show()
thread = Graph(X,Y,min_tilt,min_energy)
thread.start()