2012-04-04 15 views
0

Ich habe eine PyQt4-Anwendung mit eingebetteten Matplotlib-Figuren darin. enter image description hereZugriff auf die von matplotlib.backends.backend_qt4agg.NavigationToolbar2QTAgg bekannten Daten

Wie Sie sehen, habe ich die Navigationsleiste als Widget hinzugefügt. Ich möchte in der Lage sein, die Handlung auf der rechten Seite basierend auf den Daten zu aktualisieren, die auf der Zeichnung links angezeigt werden. Es scheint der einfachste Weg zu sein, die Informationen zu entführen, die in dem "Zooming" enthalten sind. Oder zumindest wissen, wenn ein Zoom aufgetreten ist, so dass ich rechts neu berechnen und neu zeichnen kann. Jeder hat eine gute Herangehensweise daran (eine Umsetzung von der pick_event-Ebene wäre ein letzter Ausweg)?

Antwort

1

Der beste Weg, den ich kam, ist eine benutzerdefinierte Navigationsleiste mit NavigationToolbar als Eltern erstellen. Dann habe ich der benutzerdefinierten Version ein Signal hinzugefügt und die Zeichenmethode überschrieben. Auf diese Weise könnte ich die ursprüngliche Zeichenmethode aufrufen und mein Signal mit den Informationen aus der NavigationToolbar-Datenstruktur ausgeben.

class NavigationToolbarCustom(NavigationToolbar): 
zoom_changed = pyqtSignal(float, float, name='zoomChanged') 
def __init__(self, canvas, parent): 
    NavigationToolbar.__init__(self, canvas, parent) 
    #super(NavigationToolbarCustom, self).__init__(self, canvas, parent) 
def draw(self): 
    super(NavigationToolbarCustom,self).draw() 
    if self._xypress == None: 
     home_view = self._views.home() 
     Xmin,Xmax = home_view[0][0:2] 
    else: 
     lastx, lasty, a, ind, lim, trans = self._xypress[0] 
     Xmin,Xmax=a.get_xlim() 
    self.zoom_changed.emit(Xmin,Xmax) 
Verwandte Themen