Je développe une conception de filtre à interface graphique et un outil d'analyse (https://github.com/chipmuenk/pyFDA), le sous-classement matplotlib NavigationToolbar pour mettre en œuvre des changements (ajoutés/supprimés fonctions et boutons, nouveau set d'icônes). Le code complet est disponible sous https://github.com/chipmuenk/pyFDA/. Chaque widget (tabulé) plot_ * instancie une copie de la NavigationToolbar sous-classée, par ex. de plot_widgets/plot_phi.py:Subclassing matplotlib NavigationToolbar lance erreur avec Pan/Zoom
from plot_widgets.plot_utils import MplWidget
class PlotPhi(QtGui.QMainWindow):
def __init__(self, parent = None, DEBUG = False): # default parent = None -> top Window
super(PlotPhi, self).__init__(parent)
self.mplwidget = MplWidget()
self.mplwidget.setFocus()
self.setCentralWidget(self.mplwidget)
ax = self.mplwidget.fig.add_subplot(111)
En général, cela fonctionne très bien, mais ...
... les fonctions "pan/zoom" et "rectangle de zoom" jeter les éléments suivants erreur (mais zoom et panoramique néanmoins). retraçage (le plus récent appel de dernier):
File "D:\Programme\WinPython-64bit-3.4.3.1\python-3.4.3.amd64\lib\site- packages\matplotlib\backends\backend_qt5.py", line 666, in zoom self._update_buttons_checked() File "D:\Programme\WinPython-64bit-3.4.3.1\python-3.4.3.amd64\lib\site- packages\matplotlib\backends\backend_qt5.py", line 657, in _update_buttons_checked self._actions['pan'].setChecked(self._active == 'PAN') KeyError: 'pan'
Les modificateurs de souris x et y ne fonctionnent pas et il n'y a pas non plus indication visuelle si la fonction est sélectionnée ou non. Je dois avouer, je ne comprends pas très bien l'interface (QAction?) Aux fonctions combinées pan/zoom - je ne suis pas encore un pythoniste bien expérimenté.
... ma nouvelle fonction "zoom plein écran" fonctionne mais le réglage du zoom ne peut pas être annulé en utilisant "vue précédente/suivante". Cela n'est pas une grande surprise que je ne fais pas le réglage de la vue de la liste (?) Des paramètres d'affichage, ne sachant pas où commencer :-)
Qui pourrait être si bon pour me donner un peu commencer à appliquer correctement la barre d'outils de navigation?
Et (bouchon éhonté :-)): Toute personne qui veut contribuer au projet? Les prochaines étapes seront VHDL/Verilog - Exporter à l'aide myHDL (http://myhdl.org) et sauvegarder/charger la fonctionnalité de filtre
Ceci est un extrait de plot_widgets garni/plot_utils.py
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backend_bases import cursors as mplCursors
from matplotlib.figure import Figure
class MyMplToolbar(NavigationToolbar):
"""
Custom Matplotlib Navigationtoolbar, subclassed from
NavigationToolbar.
derived from http://www.python-forum.de/viewtopic.php?f=24&t=26437
"""
def _init_toolbar(self):
# self.basedir = os.path.join(rcParams[ 'datapath' ], 'images/icons')
iconDir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
'..','images','icons', '')
# HOME:
a = self.addAction(QtGui.QIcon(iconDir + 'home.svg'), \
'Home', self.home)
a.setToolTip('Reset original view')
# BACK:
a = self.addAction(QtGui.QIcon(iconDir + 'action-undo.svg'), \
'Back', self.back)
a.setToolTip('Back to previous view')
# PAN:
a = self.addAction(QtGui.QIcon(iconDir + 'move.svg'), \
'Pan', self.pan)
# 'Pan', self.pan('self.move','self.pan')) # nearly works ...
a.setToolTip('Pan axes with left mouse button, zoom with right')
# ZOOM RECTANGLE:
a = self.addAction(QtGui.QIcon(iconDir + 'magnifying-glass.svg'), \
'Zoom', self.zoom)
a.setToolTip('Zoom in/out to rectangle with left/right mouse button.')
# Full View:
a = self.addAction(QtGui.QIcon(iconDir + 'fullscreen-enter.svg'), \
'Full View', self.parent.pltFullView)
a.setToolTip('Full view')
self.buttons = {}
# reference holder for subplots_adjust window
self.adj_window = None