Not the cleanest thing you'll see yet. I noticed that this is not as fast as the tkinter backend. Then it works.
Good luck:
import os import sys from PyQt4 import QtCore, QtGui from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.backends.backend_qt4 import NavigationToolbar2QT as NavigationToolbar from matplotlib.figure import Figure from mpl_toolkits.mplot3d import Axes3D class QtMplCanvas(FigureCanvas): def __init__(self, parent=None, width = 6.5, height = 5.5, dpi = 100, sharex = None, sharey = None, fig = None): if fig == None: self.fig = Figure(figsize = (width, height), dpi=dpi, facecolor = '#FFFFFF') self.ax = self.fig.add_subplot(111, projection='3d') self.fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9) self.ax.hold(True) else: self.fig = fig FigureCanvas.__init__(self, self.fig) FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) FigureCanvas.updateGeometry(self) def sizeHint(self): w, h = self.get_width_height() return QtCore.QSize(w, h) def minimumSizeHint(self): return QtCore.QSize(10, 10) def sizeHint(self): w, h = self.get_width_height() return QtCore.QSize(w, h) def minimumSizeHint(self): return QtCore.QSize(10, 10) class MyNavigationToolbar(NavigationToolbar) : def __init__(self, parent, canvas, direction = 'h' ) : self.canvas = canvas QWidget.__init__( self, parent ) if direction=='h' : self.layout = QHBoxLayout( self ) else : self.layout = QVBoxLayout( self ) self.layout.setMargin( 2 ) self.layout.setSpacing( 0 ) NavigationToolbar2.__init__( self, canvas ) def set_message( self, s ): pass class MPL_WIDGET_3D(QtGui.QWidget): def __init__(self, parent = None, enableAutoScale = False, enableCSV = False, enableEdit = False, fig = None): QtGui.QWidget.__init__(self, parent) self.canvas = QtMplCanvas(fig) self.canvas.ax.mouse_init() self.toolbar = NavigationToolbar(self.canvas, self.canvas) self.vbox = QtGui.QVBoxLayout() self.vbox.addWidget(self.canvas) self.vbox.addWidget(self.toolbar) self.setLayout(self.vbox)
source share