python - 结合 Qgraphics 和 sqlalchemy 时出现元类错误

标签 python sqlalchemy pyside metaclass

我想使用 sqlalchemy 使 QGraphicsItem 持久化。轻松地将 Base 类与 PySide 类组合会产生有关元类的错误。元类主题是 Python 的魔力,当不需要时我不想深入研究它。 有没有简单的方法来解决这个元类冲突?

class MarketItem(Base, QtGui.QGraphicsEllipseItem, QtGui.QListWidgetItem):
    """
    """
        __tablename__       = "marketitem"
    Id                  = Column(Integer(4), primary_key=True)
    name                = Column(String(40))
    x_pos               = Column(Integer(4))
    y_pos               = Column(Integer(4))
    def __init__(self, x_pos, y_pos, scene, name, style=QtCore.Qt.SolidLine,
                 rect=None, matrix=QtGui.QTransform(), cat = None):
        super(MarketItem, self).__init__()
        self.setFlags(QtGui.QGraphicsItem.ItemIsSelectable|
                      QtGui.QGraphicsItem.ItemIsMovable|
                      QtGui.QGraphicsItem.ItemIsFocusable)
        self.pos = QtCore.QPoint(x_pos, y_pos)
        self.x_pos = x_pos
        self.y_pos = y_pos
        self.name = name

给出错误:

  File "C:\Users\Richard\Documents\manAmpl\aptana\mampl\pm15ConeModel.py", line 47, in <module>
    class MarketItem(Base, QtGui.QGraphicsEllipseItem, QtGui.QListWidgetItem):
TypeError: Error when calling the metaclass bases
    metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

谢谢理查德

最佳答案

之前已经提出过类似的问题和 the answer它帮助我为你找到了一个可能的解决方案。

class CommonMetaclass(type(QtCore.Qt), type(Base)):
    pass

class MarketItem(QtGui.QGraphicsEllipseItem, QtGui.QListWidgetItem, Base):
    __metaclass__ = CommonMetaclass
    __tablename__ = "marketitem"
    ...

我能够像这样声明该类,但不确定它是否真的可用。

如果出现问题,请尝试更改这两个类定义中父类的顺序。

对于 Python 3,此代码片段必须稍作修改,但您没有提及 Python 3,遗憾的是,版本 2 现在是“默认”...

关于python - 结合 Qgraphics 和 sqlalchemy 时出现元类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11537266/

相关文章:

python - numpy - 从数组的每一行中选择多个元素

python - Statsmodels - 负二项式不收敛,而 GLM 收敛

SQLAlchemy 为 BINARY 列报告 "Invalid utf8mb4 character string"

pyside - 通过 PySide 实时绘制数据

python - PySide/Python GUI 卡住

python - 如何逐行比较两个不同的文件并将差异写入第三个文件?

python - 在 Flask 中使用具有不同绑定(bind)的相同名称的表

python - 持久性 where 子句 SQLAlchemy

python - 无法从 Pyside 导入 QtCore

python - 如何比较数组(不完全匹配)