【问题标题】:error in adding matplotlib widget into pyqt4将 matplotlib 小部件添加到 pyqt4 时出错
【发布时间】:2014-02-11 21:54:58
【问题描述】:

我试图使用以下代码将自定义小部件添加到 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(政策,政策) 支持的签名: PySide.QtGui.QWidget.setSizePolicy(PySide.QtGui.QSizePolicy) PySide.QtGui.QWidget.setSizePolicy(PySide.QtGui.QSizePolicy.Policy, PySide.QtGui.QSizePolicy.Policy)

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

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

【问题讨论】:

  • 你不能混用PyQt4PySides

标签: python qt matplotlib widget qt-designer


【解决方案1】:

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

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 并避免同时导入 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2019-11-23
    相关资源
    最近更新 更多