PyQt4 + matplotlib en un QScrollWidget
yo tengomatplotlib
incrustado en unPyQt4
aplicación en la que estoy trabajando. El problema es que cuando agrego dinámicamente una trama secundaria a la figura, las cifras se comprimen con cada trama secundaria agregada. Pensé que podría resolver esto estableciendo la figura a unQScrollArea
pero eso no funciona (por lo que puedo decir). Aquí hay un ejemplo de lo que pensé que funcionaría
import os
os.environ['QT_API'] = 'pyside'
from PySide.QtGui import *
from PySide.QtCore import *
import matplotlib
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
class Canvas(FigureCanvasQTAgg):
def __init__(self, parent=None):
self.figure = Figure()
super(Canvas, self).__init__(self.figure)
ax = self.figure.add_subplot(1,1,1)
ax.plot([1,2,3])
self.draw()
def add_subplot(self, data=[]):
rows = len(self.figure.axes) + 1
for index, axes in enumerate(self.figure.axes, start=1):
axes.change_geometry(rows, 1, index)
ax = self.figure.add_subplot(rows, 1, index+1)
ax.plot(data)
self.draw()
class Main(QWidget):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.canvas = QScrollArea(self)
self.canvas.setWidget(Canvas(self))
self.canvas.setWidgetResizable(True)
for x in range(5):
self.canvas.widget().add_subplot()
layout = QVBoxLayout(self)
layout.addWidget(self.canvas)
app = QApplication([])
main = Main()
main.show()
app.exec_()
¿Observa cómo todos los gráficos se rompen para mostrarlos en el mismo espacio visible? No tendré que desplazarme para ver los otros gráficos. No estoy seguro de cómo hacer esto exactamente.
¿Alguien sabe cómo hacer esto u otra forma de hacerlo?