title


genchansansanは今日も戦う。

2014/10/17

PySide in Houdini

Nukeの開発を仕事でしていたりするのですが、
こちらはPySideでgui付きのものを開発できるわけですが、
Houdiniは標準じゃついてないってことで、入れてみました。




helpやらネットの情報をいくつか合わせたって感じかしら。


1. Install Python


2. Install PySide
Pythonインストールしとかないとインストールしてくれない!?


3.Copy PySide
(インストール場所いじってない場合)
C:\Python27\Lib\site-packages内、「PySide」フォルダを
C:\Program Files\Side Effects Software\Houdini 13.0.376\python27\lib\site-packages
にコピー。


4.Copy 「pyqt_houdini.py」 file
C:\Program Files\Side Effects Software\Houdini 13.0.376\houdini\help\hom\cookbook\pyqt\part1
内の「pyqt_houdini.py」
を上記にもある
C:\Program Files\Side Effects Software\Houdini 13.0.376\python27\lib\site-packages
にコピー。

※追記 : これのPyQt4もPySideに!


5.書き換え

Nuke
from PySide import QtCore, QtGui
import nuke
class MyWidget(QtGui.QDialog):
def __init__(self, parent):
super(MyWidget, self).__init__(parent)
self.setWindowTitle('title')
self.setWindowFlags(QtCore.Qt.Tool)
self.refreshBtn = QtGui.QPushButton("btn")
self.treeWidget = QtGui.QTreeWidget()
self.treeWidget.setColumnCount(2)
self.treeWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
main_layout = QtGui.QVBoxLayout()
main_layout.setContentsMargins(6, 6, 6, 6)
main_layout.addWidget(self.refreshBtn)
main_layout.addWidget(self.treeWidget)
self.setLayout(main_layout)
f = MyWidget(QtGui.QApplication.activeWindow())
f.show()
view raw Nuke_sample.py hosted with ❤ by GitHub

Houdini
from PySide import QtCore, QtGui
import pyqt_houdini
class MyWidget(QtGui.QDialog):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)
self.setWindowTitle('title')
self.setWindowFlags(QtCore.Qt.Tool)
self.refreshBtn = QtGui.QPushButton("btn")
self.treeWidget = QtGui.QTreeWidget()
self.treeWidget.setColumnCount(2)
self.treeWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
main_layout = QtGui.QVBoxLayout()
main_layout.setContentsMargins(6, 6, 6, 6)
main_layout.addWidget(self.refreshBtn)
main_layout.addWidget(self.treeWidget)
self.setLayout(main_layout)
app = QtGui.QApplication.instance()
if app is None:
app = QtGui.QApplication(['houdini'])
dialog = MyWidget()
dialog.show()
pyqt_houdini.exec_(app, dialog)


に。
importの変更と、行末の変更ですな。
houdiniのhelpにあるのを参考にしました。
行末の内容とpyqt_houdini.py内でなにやってるかは要確認。
(pyqt_houdini.py無しにできそう?)



ちなみに、houdiniのhelpにあるサンプルは
from PyQt4 import QtCore
from PyQt4 import QtGui
view raw pyqt.py hosted with ❤ by GitHub

from PySide import QtCore
from PySide import QtGui
view raw pyside.py hosted with ❤ by GitHub
にすれば動きます。



ノードベースのNukeとHoudini。
共通のツール作れないかなぁ。
PySideで移植も多少簡単になるし。


Houdiniでシェルフみたいにアクセスしやすくて、
ノードのパラメータみたいに、hipファイルごとに
固有の値を持ち続けられるpythonを埋め込める場所はどこに....?






追記

Houdiniで外部エディタでスクリプト書きたいときは、
$EDITOR
にエディタのexeの場所を入れておく。