症状
使用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 的脚本,以便在执行之前捕获该异常。可以通过修改导入语句来调用
try和except函数,并在导入 PySide 模块时捕获ImportError来处理异常。如果捕获到异常,可以添加调用来导入 PySide2 等效函数,这将防止启动时出现
ImportError错误。更多信息
如“原因”部分所述,部分 GUI 相关功能已移至其他模块。用于所有 GUI 相关任务的 PySide 模块
PySide.QtGui大部分已移至PySide2.QtWidgets模块。在大多数情况下,使用此模块时,为了避免Nuke中的
ImportError ,并且不再需要重构脚本中的每个Pyside.QtGui函数,而是应该将PySide2.QtWidgets作为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版本。如果您希望在使用 PySide 和 PySide2 时,在Nuke 10.5 和Nuke 11 或 12 之间保持代码兼容性, Qt.py 项目提供了一个流程,可以根据您的Nuke版本切换 PySide 和 PySide2 模块。
注意:Qt.py 项目由第三方创建,因此,任何问题或疑问都需要向第三方项目所有者报告。
延伸阅读
如果您想了解更多关于异常处理的信息,可以访问以下链接查看 Python 异常处理文档: Python 文档 - 异常处理
有关解决Nuke 16+ 中 PySide 错误的更多信息,请参阅以下文章:
Q100715:如何解决Nuke 16+ 中的 Python PySide 问题
我们很遗憾听到
请告诉我们