Houdini 19.5 サンプル Pythonパネルのサンプル

ドラッグアンドドロップ

Python Panelでドラッグアンドドロップの機能を実装する方法。

Example

このサンプルでは、主にHoudini内の他の箇所からアイテムをドラッグしてPython Panelインターフェースにドロップする方法を説明しています。

<?xml version="1.0" encoding="UTF-8"?>
<pythonPanelDocument>
  <!-- This file contains definitions of Python interfaces and the
 interfaces menu.  It should not be hand-edited when it is being
 used by the application.  Note, that two definitions of the
 same interface or of the interfaces menu are not allowed
 in a single file. -->
  <interface name="DragDropExample" label="Drag and Drop Example" icon="SOP_torus">
    <script><![CDATA[from hutil.Qt import QtCore, QtGui, QtWidgets
class DDTest(QtWidgets.QFrame):
    def __init__(self, parent=None):
        super(DDTest, self).__init__(parent)

        self.myList = QtWidgets.QListView(self)
        self.myModel = QtGui.QStandardItemModel(self.myList)
        self.myList.setModel(self.myModel)

        self.mySlider = QtWidgets.QSlider(QtCore.Qt.Horizontal, self)
        self.mySlider.setRange(1, 100)
        self.mySlider.setSliderPosition(20)
        self.mySlider.valueChanged.connect(self.sliderChange)

        list_label = QtWidgets.QLabel("Selected nodes (drag and drop to add):")
        slider_label = QtWidgets.QLabel("Uniform scale:")

        horiz_layout = QtWidgets.QHBoxLayout()
        horiz_layout.addWidget(slider_label)
        horiz_layout.addWidget(self.mySlider)

        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(list_label)
        layout.addWidget(self.myList)
        layout.addLayout(horiz_layout)

        self.setLayout(layout)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, event):
        event.acceptProposedAction()

    def dropEvent(self, event):
        str = event.mimeData().text()
        index = str.find(",")

        while index > 0:
            item = QtGui.QStandardItem()
            item.setText(str[0:index])
            item.setCheckable(True)
            item.setCheckState(QtCore.Qt.Checked)
            self.myModel.appendRow(item)

            str = str[index+1:]
            index = str.find(",")

        item = QtGui.QStandardItem()
        item.setText(str)
        item.setCheckable(True)
        item.setCheckState(QtCore.Qt.Checked)
        self.myModel.appendRow(item)

        event.acceptProposedAction()

    def sliderChange(self, value):
        scale = float(value) / 20
        for i in range(0, self.myModel.rowCount()):
            item = self.myModel.item(i)
            if item.checkState() is QtCore.Qt.Checked:
                node = hou.node(item.text())
                if node is not None:
                    node.setParms({"scale": scale})

def onCreateInterface():
    return DDTest()

]]></script>
  </interface>
</pythonPanelDocument>

Pythonパネルのサンプル

  • Custom Graphics

    Python Panelでの独自のOpenGL描画。

  • Qt Designer

    Qt Designerファイルからユーザインターフェースレイアウと読み込む方法。

  • Qtイベント

    Python PanelsからQtイベントをリッスンする方法。

  • Viewport Color Editor

    ビューポートのカラーを編集するためのPySideインターフェース。

  • ドラッグアンドドロップ

    Python Panelでドラッグアンドドロップの機能を実装する方法。

  • ノードパス

    現行ノードパスの変更を検知する方法。

  • パラメータのリンク

    PySideパラメータウィジェット(つまり、テキストフィールドとスライダ)をHoudiniのノードパラメータへリンク、またはその逆のリンクの付け方。