PyPanel でHDAのUIを作る
Panel を作るときは、まず Windows > Python PanelEditor を開く。
そして、「New Interface」を選んで枠を作成します。 作成したファイルは、 proj/python_panels 下に XXXX.pypanel という拡張子で保存される。
追加したあと、使えるようにするには ToolBarMenu のタブに移動して 作成したパネルを Toolbar Menu Entries に移動します。
移動すると、Tab の Misc > Python Panel から表示するビューを開き
一覧から、作成したパネルを選ぶと表示できます。
ただ、それだと HDA の UI にならないので、パネルの Parameters Pane Hints に そのパネルを表示したい HDA を入れます。
名前は、 Namespace::Sop/###### のように入力します。
サンプルのように、名前やバージョンが入っている場合は、途中にコンテキスト名を入れる必要があるので
それだけ注意です。
アスタリスクを入れると、ワイルドカード扱いになるので すべてのバージョンだったりすべての SOP ノード
のように合致する HDA に対してパネルを適応できます。
from PySide6 import QtWidgets, QtGui, QtCore
import sys, os
class IconGridView(QtWidgets.QWidget):
def __init__(self, parent=None):
super(IconGridView, self).__init__(parent)
layout = QtWidgets.QVBoxLayout(self)
# QListWidgetを用意
self.listWidget = QtWidgets.QListWidget()
layout.addWidget(self.listWidget)
for name in ["A","B","C"]:
item = QtWidgets.QListWidgetItem(name)
self.listWidget.addItem(item)
self.listWidget.clicked.connect(self.clicked)
def clicked(self,index):
value = index.data()
panel = hou.ui.paneTabOfType(hou.paneTabType.Parm)
if panel:
node = panel.currentNode()
node.parm('sample').set(value)
def onCreateInterface():
widget = IconGridView()
return widget
パネルの実装は PySide で実装します。
onCreateInterface() の return で PySide の Widget を返すようにします。
それ以外は、基本的には PySide の UI を作るのと同じ感じで UI を作成できます。
現在表示されている HDA のノードを取得する場合は、
panel = hou.ui.paneTabOfType(hou.paneTabType.Parm)
if panel:
node = panel.currentNode()
パネルから、currentNode を取得すれば OK です。
結果、このように PySide のリストを HDA のパラメーター編集 UI として表示できました。
作成したパネルは、このアイコンを表示すると非表示にできます。