On this page |
概要 ¶
このサンプルは、PySide2を使用して、Houdiniの内部で独自のUIウィンドウを作成します。 PySide2は、Houdiniに含まれているため、インストールする必要はありません。
Tip
Houdiniのペインタブ内に独自のインターフェースが必要な場合は、Python Panelを使用します。
実装 ¶
Warning
PySide2コードは、Houdiniのメインスレッドから実行する必要があります。 つまり、これはシーンファイルのHoudiniモジュールからという意味で、 シーンファイルのロード時に実行されたり、シェルフツールの Script タブから実行されます。
Pythonシェルで、以下のサンプルコードを実行しないでください。実行しても機能せず、Houdiniがクラッシュする可能性があります。
-
シェルフ上の空白スペースで右クリックし、 New Tool を選択します。
ツールの Name を
pyside
に、 Label をPySide2 Demo
に、 Icon をMISC_python
に設定します。 -
ツールの Script タブで、以下のコードをペーストします。
from PySide2 import QtCore from PySide2 import QtWidgets class FontDemo(QtWidgets.QWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) hbox = QtWidgets.QHBoxLayout() self.setGeometry(500, 300, 250, 110) self.setWindowTitle('Font Demo') button = QtWidgets.QPushButton('Change Font', self) button.setFocusPolicy(QtCore.Qt.NoFocus) button.move(20, 20) hbox.addWidget(button) self.connect(button, QtCore.SIGNAL('clicked()'), self.showDialog) self.label = QtWidgets.QLabel('This is some sample text', self) self.label.move(130, 20) hbox.addWidget(self.label, 1) self.setLayout(hbox) def showDialog(self): ok, font = QtWidgets.QFontDialog.getFont() if ok: self.label.setFont(font) dialog = FontDemo() dialog.show()
-
Accept をクリックします。
-
新しいPySide2 Demoのシェルフツールをクリックします。
ボタンとラベルを含んだカスタムウィンドウが開きます。ボタンをクリックして、ラベルテキストのフォントを変更するフォント選択ダイアログを表示します。
ウィンドウの寿命 ¶
PySide2ウィンドウは、Pythonでそれを参照している場合のみ存在します。
独自のコードを書く時、関数内にウィンドウを作成し、(hou.session
のように)メモリ内のどこかに継続して保存しないのであれば、Pythonガベージがその関数の最後でウィンドウを収集する時にウィンドウが消えます。
このサンプルでは、ツールスクリプトの実行が終了した後もウィンドウは継続して存在しますが、これは、ツールが再度クリックされるまで、スクリプトコンテキストをHoudiniが実際にリサイクルしないという事実の副作用です。
PySide2の代わりにPyQt5を使用する ¶
PySide2の代わりにPyQt5を使用したい場合、PyQt5をインストールする必要があります。 尚、PyQt5の商業的利用には、商用ライセンスが必要なため、詳細はPyQt5のウェブサイトを参照してください。
Windows
WindowsでPyQt5を使用する場合、Houdini内のPythonのパス(Houdini install location/python
)に、必ずライブラリをインストールしてください。
サンプルでPyQt5を使用するには、PySide2
の参照をPyQt5
に置き換えます:
from PyQt5 import QtCore from PyQt5 import QtWidgets