我想使用 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/