Create a ticket
关注

Q100398:在Nuke 11中执行PySide脚本

问题状况

当在Nuke 11中启动Python脚本时,如果您的Nuke脚本需要Python的PySide模块,Nuke将会抛出异常,并阻止其打开。

如果在Nuke的menu.py文件中导入PySide模块,那么在Nuke启动时,便会出现以下 异常:
 
PluginError.PNG
 
同时,在Nuke的启动终端里也将会显示一个ImportError(导入错误),指出 Nuke无法导入某个PySide模块,在本例中为PySide.QtCore:
 
PluginError3.png
 

问题原因


随着Nuke 11的发布,为了使Nuke 符合ce Platform 2017的兼容要求,已经进行了大量的库更新。
 
在PySide方面,由于Nuke核心库中的PySide 1.2.2已经更新到了PySide 2.0,因此,
现在可以作为Pyside2而不是PySide导入。关于Nuke 11附带的库版本的更多相关信
息,请参阅 在线帮助中的附录D.
 
由于从PySide更新到PySide2,因此从Nuke 11开始,PySide模块便不再可以调用了.
 
举例:
 
import PySide.some_module
 
已被替换为:

import PySide2.some_module
 
某些类定义也在模块之间作了移动。这尤其会影响到与图形界面相关的类,这些类中的大多数已从PySide.QtGui移到了PySide2.QtWidgets。此外,其它的一些模 块也作了重新归类。
 
 

解决方案

要解决在启动Nuke时出现的ImportError异常,您需要更改“.nuke”文件夹中所有 使用了PySide的脚本,以便在执行前捕获异常。

在导入PySide模块时,可以通过修改导入声明(import statements)来调用try和 except函数处理异常,并捕获 ImportError错误。
 
如果已捕获到异常,就可以添加调用,从而导入PySide2中的等效函数。由此防止启 动时出现ImportError错误。
 
 

扩展信息


正如“问题原因”部分所述,此问题是由于某些与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模块的脚本在Nuke 11中能正常工作,您需要完成全部转换, 并确保所有PySide函数都重构为了PySide2版本。
 

如果你希望在Nuke 10.5和Nuke11上运用PySide 和 PySide2时能具备足够的兼容性,那么Qt.py工程中已提供了模块,能依据具体的版本来切换至ySide或PySide2。

注意:Qt.py工程由第三方创建。因此,若有问题或疑问都请报告给第三方工程所有 者。

 

扩展阅读


I如果您想了解有关处理异常的更多信息,可以通过以下链接访问Python文档中的异 常部分:Python文档 - 处理异常
 
如果您的脚本使用了PySide2.QtWebEngine,那遗憾的是,该模块当前尚未在Nuke 11中实现,因此您的脚本将无法运作。有关这方面的更多信息,请访问:Q100379:将PySide2.QtWebEngine导入Nuke 11
 
 
这篇文章有帮助吗?
/

We're sorry to hear that!

Please tell us why.
8 人中有 7 人觉得有帮助

评论