RampEditor

from PySide import QtCore
from PySide import QtGui
parm = kwargs["parms"][0]
parmPath = parm.path()
if parm.parmTemplate().type().name() == "Ramp":
    class Example(QtGui.QWidget):
        def __init__(self):
        super(Example, self).__init__()
        self.initUI()
        
        def initUI(self):          
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Ramp Editor')
        
        fbox = QtGui.QFormLayout()
        ##Lbox = QtGui.QVBoxLayout()
        
        ###Postion Scale###
        label1Scale = QtGui.QLabel('Position Scale:', self)
        
        PS_box = QtGui.QHBoxLayout()
        scalePos = QtGui.QDoubleSpinBox(self)
        scalePos.setValue(1)
        scalePos.setSingleStep(0.1)
        scalePos.setRange(-10.0,10.0)
        PS_box.addWidget(scalePos)
        
        PS_button = QtGui.QPushButton('ApplyPS', self)
        PS_button.clicked.connect(lambda: self.pressPS_Button( scalePos.value() ) )
        PS_box.addWidget(PS_button)
        fbox.addRow(label1Scale,PS_box)
        
        ###Postion Offset###
        label1Offset = QtGui.QLabel('Position Offset:', self)

        PO_box = QtGui.QHBoxLayout()
        offsetPos = QtGui.QDoubleSpinBox(self)
        offsetPos.setValue(0)
        offsetPos.setSingleStep(0.1)
        offsetPos.setRange(-10.0,10.0)
        PO_box.addWidget(offsetPos)
        
        PO_button = QtGui.QPushButton('ApplyPO', self)
        PO_button.clicked.connect(lambda: self.pressPO_Button( offsetPos.value() ) )
        PO_box.addWidget(PO_button)
        fbox.addRow(label1Offset,PO_box)
              
        ###Value Scale###
        label2Scale = QtGui.QLabel('Value Scale:', self)

        VS_box = QtGui.QHBoxLayout()
        scaleVal = QtGui.QDoubleSpinBox(self)
        scaleVal.setValue(1)
        scaleVal.setSingleStep(0.1)
        scaleVal.setRange(-10.0,10.0)
        VS_box.addWidget(scaleVal)
        
        VS_button = QtGui.QPushButton('ApplyVS', self)
        VS_button.clicked.connect(lambda: self.pressVS_Button( scaleVal.value() ) )
        VS_box.addWidget(VS_button)
        fbox.addRow(label2Scale,VS_box)

        ###Value Offset###
        label2Offset = QtGui.QLabel('Value Offset:', self)
        
        VO_box = QtGui.QHBoxLayout()
        offsetVal = QtGui.QDoubleSpinBox(self)
        offsetVal.setValue(0)
        offsetVal.setSingleStep(0.1)
        offsetVal.setRange(-10.0,10.0)
        VO_box.addWidget(offsetVal)
        
        VO_button = QtGui.QPushButton('ApplyVO', self)
        VO_button.clicked.connect(lambda: self.pressVO_Button( offsetVal.value() ) )
        VO_box.addWidget(VO_button)
        fbox.addRow(label2Offset,VO_box)
        
        
        self.setLayout(fbox)

        def pressPS_Button(self, scale):
            posList = parm.evalAsRamp().keys()
            with hou.undos.group("position scale"):
                for i in range(0, len(posList)):
                    posPath = parmPath + str(i+1) + "pos"
            value = posList[i] * scale
            hou.parm(posPath).set(value)

        def pressPO_Button(self, offset):
            posList = parm.evalAsRamp().keys()
            with hou.undos.group("position offset"):
                for i in range(0, len(posList)):
                posPath = parmPath + str(i+1) + "pos"
                value = posList[i] + offset
            hou.parm(posPath).set(value)

        def pressVS_Button(self, scale):
posList = parm.evalAsRamp().values()
with hou.undos.group("position scale"):
for i in range(0, len(posList)):
posPath = parmPath + str(i+1) + "value"
value = posList[i] * scale
hou.parm(posPath).set(value)

        def pressVO_Button(self, offset):
posList = parm.evalAsRamp().values()
with hou.undos.group("position offset"):
for i in range(0, len(posList)):
posPath = parmPath + str(i+1) + "value"
value = posList[i] + offset
hou.parm(posPath).set(value)

      
dialog = Example()
dialog.show()