繁体   English   中英

将matplotlib小部件添加到pyqt4中时出错

[英]error in adding matplotlib widget into pyqt4

我试图使用以下代码将自定义窗口小部件添加到qtdesginer中

from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
import PySide
from matplotlib.figure import Figure

class MplCanvas(FigureCanvas):

    def __init__(self):
        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)

        FigureCanvas.__init__(self, self.fig)
        FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)


class MplWidget(QtGui.QWidget):
    def __init__(self, parent = None):

        QtGui.QWidget.__init__(self, parent)
        self.canvas = MplCanvas()
        self.vbl = QtGui.QVBoxLayout()
        self.vbl.addWidget(self.canvas)
        self.setLayout(self.vbl)

但我只是给我一个错误

TypeError:'PySide.QtGui.QWidget.setSizePolicy'用错误的参数类型调用:PySide.QtGui.QWidget.setSizePolicy(Policy,Policy)支持的签名:PySide.QtGui.QWidget.setSizePolicy(PySide.QtGui.QSizePolicy) QWidget.setSizePolicy(PySide.QtGui.QSizePolicy.Policy,PySide.QtGui.QSizePolicy.Policy)

我不确定是什么引起了错误,因为我基本上遵循了这一部分http://packtlib.packtpub.com/library/9781847197900/ch06lvl1sec04

任何建议都是好的,因为我是这个qt设计师的新手。

我很幸运在我的自定义matplotlib小部件中继承了具有super(...).__init__() FigureCanvas而不是BaseClass.__init__(self)方法。 您的小部件对我有用,但做了一些小的更改:

class MplCanvas(FigureCanvas):
    def __init__(self):
        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)
        super(MplCanvas, self).__init__(self.fig)
        self.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)
        self.updateGeometry()

另外...我同意@tcaswell,您应该选择PyQt4或PySide并避免同时导入两者:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM