Hello,
I have decided to switch to the QtAgg backend because the Designer
software is very appealing. I succeeded in adding a custom widget
representing the FigureCanvasQTAgg, but when I compile the ui file, I
see that it tries to instantiate it as FigureCanvasQTAgg(Parent) where
Parent is the parent widget, which seems to be the standard format for
instantiating widgets. However, FigureCanvasQTAgg expects a figure as
an argument.
I have seen this tutorial:
http://www.scipy.org/Cookbook/Matplotlib/Qt_with_IPython_and_Designer
which suggests making a MatplotlibWidget to wrap the Canvas and set
everything up including the parent. I have written a version of this
for Qt4, but this seems like something that should be included in the
Qt4 backends. Any plans on adding this? I'd be happy to contribute.
Attached is my initial version.
Glenn
from PyQt4 import QtGui, QtCore
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.figure import Figure

class FigureCanvasQTAggWidget(FigureCanvasQTAgg):
    def __init__(self, parent = None, width=3, height =3, dpi = 100):
        self.fig = Figure(figsize=(width,height), dpi=dpi)
        FigureCanvasQTAgg.__init__(self, self.fig)
        self.setParent(parent)
        self.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)
        self.updateGeometry()
from PyQt4 import QtGui, QtDesigner
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
from FigureCanvasQTAggWidget import FigureCanvasQTAggWidget

class FigureCanvasQTAggWidgetPlugin(QtDesigner.QPyDesignerCustomWidgetPlugin):
    def __init__(self, parent = None):
        QtDesigner.QPyDesignerCustomWidgetPlugin.__init__(self)
        self.initialized = False
    def initialize(self,core):
        if self.initialized:
            return
        self.initialized = True
    def isInitialized(self):
        return self.initialized
    def createWidget(self, parent):
        fc = FigureCanvasQTAggWidget(parent,width=2, height=2)
        fc.figure.add_subplot(111)              #Show something other than a grey canvas
        return fc
    def name(self):
        return "FigureCanvasQTAggWidget"
    def group(self):
        return "Display Widgets"
    def icon(self):
        return QtGui.QIcon(_logo_pixmap)
    def toolTip(self):
        return "Matplotlib Canvas"
    def whatsThis(self):
        return ""
    def isContainer(self):
        return False
    def domXml(self):
        return '<widget class="FigureCanvasQTAggWidget" name=\"FigureCanvasQTAggWidget\" />\n'
    def includeFile(self):
        return "FigureCanvasQTAggWidget"  #Eventually part of matplotlib.backends.backend_qt4agg hopefully
    
    
_logo_16x16_xpm = [
    "16 16 5 1",
    "B c #000000",
    "r c #ff0000",
    "g c #00ff00",
    "b c #0000ff",
    ". c #ffffff",
    "................",
    "..BBBBBBBBBBBB..",
    "..B.........bB..",
    "..B........b.B..",
    "..B.......b..B..",
    "..B.......b..B..",
    "..B.......b..B..",
    "..B......b...B..",
    "..B...b.b....B..",
    "..B..b.b.....B..",
    "..B..b.......B..",
    "..B..b.......B..",
    "..B.b........B..",
    "..Bb.........B..",
    "..BBBBBBBBBBBB..",
    "................"]

_logo_pixmap = QtGui.QPixmap(_logo_16x16_xpm)
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to