首页 > 解决方案 > PySide2 (5.11.x):无法在 Python 2.7 中调用 type(QtWidgets.QWidget).__new__

问题描述

我们有一个基于type(QtWidgets.QWidget)- 解析为Shiboken.ObjectType- 我们在生产中拥有的元类,它可以追溯到 PySide/Qt4,它破坏了 pypy (5.11.x) 上的 PySide2 版本。PySide2 的早期 alpha 版本(2.0.0~alpha0)没有这个问题。

如果您使用 PySide2 的 5.11.x 版本从 Python 2.7 调用以下内容,您会看到它看起来好像Shiboken.ObjectType是在传递它被赋予的参数type.__new__,这是不允许的。

这行代码只是为了说明问题而设计的,因此使用了空名称、父级和 class_dict 参数,并按原样传递类型。在我们的生产代码中,这将是我们定义的元类,其余参数将从输入 args/kwargs 传递:

type(QtWidgets.QWidget).__new__(type(QtWidgets.QWidget), "", (), {})

在 PySide2 5.11.x 中,提出了以下问题:

TypeError: Shiboken.ObjectType.__new__(Shiboken.ObjectType) is not safe, use type.__new__()

在 PySide/Qt4 或 PySide2 2.0.0~alpha0 中,会出现正确的返回:

<class '__main__.'>

以前有没有人反对过这个?我们是在做一些根本错误的事情,还是我们可以采用一种解决方法?shiboken2 中的某些内容发生了变化,但我不确定这是否是一个错误,或者我们的代码是否完全不正确,并且我们可以进行一些调整以使其正常工作。

标签: pythonpython-2.7pyside2

解决方案


推荐阅读