PyQt4 + matplotlib in einem QScrollWidget
ich habematplotlib
eingebettet in aPyQt4
App, an der ich arbeite. Das Problem ist, wenn ich der Figur dynamisch einen Untergrund hinzufüge, die Figuren mit jedem hinzugefügten Untergrund komprimieren. Ich dachte, ich könnte das lösen, indem ich die Zahl auf a setzeQScrollArea
aber das geht nicht (soweit ich das beurteilen kann). Hier ist ein Beispiel von dem, was ich dachte, würde funktionieren
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_()
Beachten Sie, wie alle Graphen zusammengeschlagen werden, um dann im selben sichtbaren Raum anzuzeigen? Ich muss nicht scrollen, um die anderen Grafiken zu sehen. Ich bin mir nicht sicher, wie ich das genau machen soll.
Weiß jemand, wie man das macht oder wie man das macht?