2015-09-30 30 views
5

Vor kurzem begann ich zu entwickeln Entwicklungs UI in Qt Designer und bearbeiten sie durch PyQt. Die Dinge sind ziemlich smoothy gegangen, aber ich bin gerade dabei, das folgende Problem zu lösen:Matplotlib Navigation Toolbar: entfernen "Bearbeiten Kurven Linien und Achsen Parameter"

Ich habe ein MatplotLib-Widget durch Qt Designer eingefügt und es geschafft, ziemlich gut horizontale Balken mit Barh zu plotten. Als nächstes habe ich versucht und erfolgreich geschafft, eine funktionale NavigationToolBar durch matplotlib.backends.backend_qt4agg.NavigationToolbar2QT

einzufügen Dann folgte ich diesem Thread (und ähnliche) Ich habe es geschafft zu bearbeiten, welche Schaltflächen ich möchte in der Symbolleiste angezeigt werden ... How to modify the navigation toolbar easily in a matplotlib figure window?

Es funktioniert gut für jede Schaltfläche außer für die letzte, mit einem Kontrollkästchen die Beschreibung "Kurvenlinien und Achsenparameter bearbeiten". In diesem speziellen Fall möchte ich diese Schaltfläche wirklich entfernen, da sie beim Bewegen der Maus die Größe ständig ändert und in diesem Fall brauche ich diese Schaltfläche nicht.

Ich habe noch keinen Thread diskutieren diese besondere Symbolleiste auf die Schaltfläche (nur diese eine matplotlib: Qt4Agg toolbar's irritating bug)

Der verwendete Code einzufügen, um die Symbolleiste und zur Zeit Editierbuttons sieht ungefähr so ​​gefunden:

from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT 

class currentUI(QtGui.QWidget): 

    def __init__(self): 
     super(currentUI,self).__init__() 
     (...) 
     uic.loadUi('portfolioManager.ui',self) 
     self.initUI() 
     (...) 
    def initUI(self):   
     self.setWidgetsPropertiesAndActions() 
    (...) 
    def setWidgetsPropertiesAndActions(self): 
     (...) 
     self.navi_toolbar=NavigationToolbar(self.mplwidgetExposures, self) 
     self.LayoutPlot.addWidget(self.navi_toolbar) 
(...) 
class NavigationToolbar(NavigationToolbar2QT): 

    toolitems = [t for t in NavigationToolbar2QT.toolitems if 
       t[0] in ('Home','Pan', 'Zoom', 'Save','Subplots')] 

Dies bettet die Symbolleiste erfolgreich ein, aber die Schaltfläche "Bearbeiten" bleibt erhalten.

Vielen Dank für einen Einblick. Grüße

Antwort

5

Sie können es, indem Sie das folgende in der NavigationToolbar Klasse entfernen

actions = self.findChildren(QtGui.QAction) 
    for a in actions: 
     if a.text() == 'Customize': 
      self.removeAction(a) 
      break 

Der Grund, warum Sie diese besondere Taste nicht entfernen können toolitems durch Modifikation ist, weil sie separat zu der Symbolleiste hinzugefügt wird, nachdem alle toolitems Einträge wurden hinzugefügt.

for text, tooltip_text, image_file, callback in self.toolitems: 
     if text is None: 
      self.addSeparator() 
     else: 
      a = self.addAction(self._icon(image_file + '.png'), 
            text, getattr(self, callback)) 
      self._actions[callback] = a 
      if callback in ['zoom', 'pan']: 
       a.setCheckable(True) 
      if tooltip_text is not None: 
       a.setToolTip(tooltip_text) 

    if figureoptions is not None: 
     a = self.addAction(self._icon("qt4_editor_options.png"), 
          'Customize', self.edit_parameters) 
     a.setToolTip('Edit curves line and axes parameters') 
+0

Vielen Dank für Ihre Erkenntnisse! Ihrer Idee folgend habe ich eine Funktion in der NavigationToolbar-Unterklasse zum Entfernen von Aktionen generiert und hervorragend funktioniert. Prost! –

Verwandte Themen