PyQt在Houdini中执行的模板代码

PyQt的历史 Dialog、Layout与Widget之间的关系 setStyleSheet load

https://build-system.fman.io/qt-designer-download https://github.com/qt

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""

"""

import os
import sys

import re


try:
    APP = "houdini"
    import hou

    from PySide2 import QtCore
    from PySide2 import QtWidgets as QtGui
except Exception as e:
    raise


class ActiveShotgun(QtGui.QDialog):
    """
    Initial main window
    """
    def __init__(self, parent=None):
        """
        """
        super(ActiveShotgun, self).__init__(parent)

        self._initUI()

    def _initUI(self):

        gbChoose = QtGui.QGroupBox("Choose Asset or Shot:")
        hblChoose = QtGui.QVBoxLayout()
        self.rbAsset = QtGui.QRadioButton("Asset")
        self.rbShot = QtGui.QRadioButton("Shot")
        self.rbShot.setChecked(True)
        hblChoose.addWidget(self.rbAsset)
        hblChoose.addWidget(self.rbShot)
        gbChoose.setFixedHeight(100)
        gbChoose.setLayout(hblChoose)

        # Initial labels
        hlLabel = QtGui.QHBoxLayout()
        lProj = QtGui.QLabel("Proj:")
        lTask = QtGui.QLabel("Task:")
        hlLabel.addWidget(lProj)
        hlLabel.addWidget(lTask)

        # Initial choose asset or shot task
        hlListWidget = QtGui.QHBoxLayout()
        self.lwProj = QtGui.QListWidget()

        self.lwTask = QtGui.QListWidget()
        hlListWidget.addWidget(self.lwProj)
        hlListWidget.addWidget(self.lwTask)

        # Initial buttons
        hlActive = QtGui.QHBoxLayout()
        pbActive = QtGui.QPushButton("&Active Shotgun...")
        pbActive.setFixedWidth(120)
        pbActive.setFixedHeight(50)
        hlActive.addStretch(1)
        hlActive.addWidget(pbActive)

        v_box = QtGui.QVBoxLayout()
        v_box.addWidget(gbChoose)
        v_box.addLayout(hlLabel)
        v_box.addLayout(hlListWidget)
        v_box.addLayout(hlActive)

        self.setLayout(v_box)
        self.resize(QtCore.QSize(500, 600))
        self.setWindowTitle("Active Shotgun Options: Hello, %s")
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)

    def closeEvent(self, event):
        self.done(0)


def showUI(func):
    """
    Show UI instance
    """
    app = QtGui.QApplication.instance()

    if not app:
        app = QtGui.QApplication([APP])

    dialog = func()
    dialog.raise_()
    dialog.show()
    dialog.exec_()


def main():
    """
    main function
    """
    showUI(ActiveShotgun)

main()
import os
import hou

from hutil.Qt import QtCore, QtWidgets, QtUiTools
from commonQt.appQss import qss
path = os.path.dirname(__file__)
print(path)


class AttribManager(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        print("Hey I am in a class!!!")

        # load UI file
        loader = QtUiTools.QUiLoader()
        self.ui = loader.load("D:/centralizeTools/houdini/scripts/python/houQt/untitled.ui")

        # Layout
        mainLayout = QtWidgets.QVBoxLayout()
        mainLayout.setContentsMargins(0, 0, 0, 0)
        mainLayout.addWidget(self.ui)
        self.setLayout(mainLayout)
        self.setStyleSheet(qss)


def show():
    dialog = AttribManager()
    dialog.setParent(hou.qt.floatingPanelWindow(None), QtCore.Qt.Window)
    dialog.show()


if __name__ == "hou.session":
    show()

将.ui文件转.py文件

C:\Python27\Scripts\pyside-uic.exe -o ???.py ???.ui

将.qrc文件转.py文件

C:\Python27\Lib\site-packages\PySide\pyside-rcc.exe -o ???.py ???.qrc

Python代码将.ui转.py文件

import pyside2uic

with open("py文件路径", "w") as f:
    pyside2uic.compileUi("ui文件路径", f)

# load ui