2013-08-13 6 views
5

Sono in esecuzione il codice scritto con PyQt4 che utilizza Qt4Agg backend di matplotlib per mostrare trame dal vivo in finestre. Allo stesso tempo, vorrei utilizzare matplotlib in thread in background per la produzione di dati (diversi) che sono salvati solo file, non mostrato sullo schermo.utilizzando backend interattive e non interattive all'interno di un programma di

posso usare Qt4Agg in thread in background, ma io sono sempre un po 'di

QPixmap: It is not safe to use pixmaps outside the GUI thread 

avvertimenti, e si blocca in alcuni casi anche.

Per quanto vedo, matplotlib attualmente supporta l'utilizzo di un solo back-end in qualsiasi momento (che può essere modificato tramite switch_backend, ma che chiude tutte le figure esistenti). C'è un modo per aggirare questa limitazione e assegnare un backend per figura?

risposta

6

A mia conoscenza, solo se non si utilizza l'interfaccia pyplot.

Ad esempio, utilizzando l'interfaccia completa OO per una trama semplice:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 

fig = Figure() 
canvas = FigureCanvas(fig) 
ax = fig.add_subplot(1,1,1) 
ax.plot([1,2,3]) 
canvas.print_figure('test.png') 

HTH

+0

Un modo per dare più di un +1 per questa risposta? Hai fatto la mia giornata, davvero. – eudoxos

+1

:-) Grazie per questo. +1 è abbastanza però. + Se ci incontreremo in una conferenza Python, non vorrei abbassare una birra. – pelson

Problemi correlati