Ich versuche, Matplotlib in einer PyQt4 + Python 2.7-Anwendung einzubetten, so dass ich Bild (d. H. 2D) Daten in meiner Benutzeroberfläche visualisieren kann. Ich möchte Verwendung einiger matplotlib Funktionalität machen wie Farbtabellen, Zoomen usw. Ich habe ein paar Tutorials online gefunden, aber die nächste Sache, die mein Problem kommt, ist die folgende Frage SO:Einbetten von Matplotlib in PyQt4
Embedding matplotlib in pyqt4 using imshow
Wie der Autor möchte ich auch "imshow (...)" verwenden. Mit ein Tutorial Online kann ich matplotlib in meinem UI als QWidget einbetten wie folgt:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
class matPlotLibImage(FigureCanvas):
def __init__(self):
self.fig = Figure()
self.axes = self.fig.add_subplot(111)
self.x = np.arange(0.0, 3.0, 0.01)
self.y = np.cos(2*np.pi*self.x)
self.axes.plot(self.x, self.y)
super(MatPlotLibImage, self).__init__(self.fig)
In meinem QDockWidget abgeleitete Klasse Code kann ich einbetten dann das oben matplotlib Widget über:
self.mainImage = MatPlotLibImage()
self.setWidget(self.mainImage)
Diese funktioniert und zeigt wie erwartet ein einfaches Diagramm an. Nun möchte ich jedoch Bilddaten anzeigen, die als numplige Arrays dargestellt werden. Alle Beispiele Ich bin online zu sehen sind, mit Varianten der folgenden Möglichkeiten:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
img = mpimg.imread("someImage.png")
imgplot = plt.imshow(img)
Meine Frage ist: Wie kombiniere ich die beiden Ansätze, so dass ich verwenden kann ‚imshow()‘ aber eingebettet, wie ich für das tat einfache Handlung? Vielen Dank im Voraus.
Klarstellung: Genau genommen ist es nicht entscheidend, dass ich 'imshow (was auch immer)' benutze, ich bin nur daran interessiert, Bilddaten in meinem eingebetteten Matplotlib-Widget anzuzeigen. Imshow hat jedoch einige nützliche Dinge, die ich gerne nutzen würde.
Vielen Dank. Bitte beachten Sie meinen Kommentar unten. – LKeene