症状
当使用Nuke 11.0v1 或更高版本启动 Python 脚本时,如果您的脚本需要 Python 的 PySide 模块,则Nuke将引发异常,从而阻止其打开。
如下所示,如果在Nuke的
init.py
文件中导入 PySide 模块,则Nuke启动时会出现以下异常: 在Nuke的启动终端中,将显示一个
ImportError
,指定Nuke无法导入 PySide 模块,在本例中为PySide.QtCore
: 原因
就 PySide 而言, Nuke核心库中的 PySide 1.2.2 已更新为 PySide 2.0,因此现在可以作为 Pyside2 而不是 PySide 导入。有关Nuke当前附带的库版本的更多信息,请参阅文档的第三方库和字体部分。
由于从 PySide 更新到 PySide2,从Nuke 11.0v1 开始,PySide 模块不再可调用。
例如:
import PySide.some_module
已替换为:
import PySide2.some_module
此外,某些类的定义已在模块之间移动。这尤其影响任何与 GUI 相关的类,这些类大部分已从
PySide.QtGui
移动到PySide2.QtWidgets
,但是,还有其他模块也已重新定位。解决
要解决启动Nuke时的
ImportError
异常,“.nuke”文件夹中使用 PySide 的任何脚本都需要进行更改,以在执行前捕获异常。处理异常可以通过修改 import 语句来调用
try
和except
函数,并在导入 PySide 模块时捕获ImportError
来完成。如果捕获到异常,可以添加调用来导入 PySide2 等效函数,这将防止启动时出现
ImportError
错误。更多信息
正如原因部分所述,一些 GUI 相关功能已移至其他模块。用于所有 GUI 相关任务的 PySide 模块
PySide.QtGui
大部分已移至PySide2.QtWidgets
模块。在大多数情况下,使用此模块时,为了避免Nuke中出现
ImportError
,并且您现在应该将PySide2.QtWidgets
导入为QtGui
,而不是重构脚本中的每个Pyside.QtGui
函数。可以按照以下代码片段所示进行设置:
try: from PySide import QtGui, QtCore except ImportError:
from PySide2 import QtCore
from PySide2 import QtWidgets as QtGui
这允许较旧的 PySide 代码在 PySide2 中运行,因为大多数 QtGui 功能已移至 QtWidgets 模块。请注意:这适用于许多 PySide 模块,但不是全部,因此您可能仍然需要更新代码的其他部分。
为了确保使用 PySide 模块的脚本在Nuke 11 和Nuke 12 中正常工作,您需要完成转换,并且所有
PySide
功能都需要重构为PySide2
版本。如果您希望在Nuke 10.5 和Nuke 11 或 12 上使用 PySide 和 PySide2 时具有代码兼容性, Qt.py 项目提供了一个根据您的Nuke版本切换 PySide 和 PySide2 模块的过程。
注意:Qt.py 项目是由第三方创建的,因此,任何问题或疑问都需要向第三方项目所有者报告。
补充阅读
如果您想了解有关处理异常的更多信息,可以通过以下链接访问有关异常的 Python 文档: Python 文档 - 处理异常
我们很遗憾听到
请告诉我们