PySide スライダ

import hou
from PySide2 import QtWidgets
from PySide2 import QtCore

class FloatSliderGrp(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(FloatSliderGrp, self).__init__(parent)
        
        hlayout = QtWidgets.QHBoxLayout()
        self.setLayout(hlayout)
        
        self.label = QtWidgets.QLabel()
        self.label.setText('ラベル')
        hlayout.addWidget(self.label)
        
        self.line = QtWidgets.QLineEdit()
        self.line.textChanged.connect(self.setSlider)
        hlayout.addWidget(self.line)
        
        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        self.slider.valueChanged.connect(self.disp)
        hlayout.addWidget(self.slider)
        
    def disp(self):
        v = self.slider.value()
        self.line.setText(str(v / 10.0))
    
    def setLabel(self, label):
        self.label.setText(label)
    
    def value(self):
        return self.slider.value() / 10.0
    
    def setSlider(self):
        v = self.line.text()
        self.slider.setValue(float(v)*10)
    
    def setMinMax(self, min, max, value):
        self.slider.setRange(min*10, max*10)
        self.slider.setValue(value*10)
            
        
class IntSliderGrp(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(IntSliderGrp, self).__init__(parent)
        
        hlayout = QtWidgets.QHBoxLayout()
        self.setLayout(hlayout)
        
        self.label = QtWidgets.QLabel()
        self.label.setText('ラベル')
        hlayout.addWidget(self.label)
        
        self.spin = QtWidgets.QSpinBox()
        self.spin.valueChanged.connect(self.setSlider)
        hlayout.addWidget(self.spin)
        
        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        self.slider.valueChanged.connect(self.disp)
        hlayout.addWidget(self.slider)
        
    def disp(self):
        v = self.slider.value()
        self.spin.setValue(v)
        
    def setLabel(self, label):
        self.label.setText(label)
        
    def value(self):
        return self.slider.value()
    
    def setSlider(self):
        v = self.spin.value()
        self.slider.setValue(v)
        
    def setMinMax(self, min, max, value):
        self.spin.setMinimum(min)
        self.spin.setMaximum(max)
        self.spin.setValue(value)
    
        self.slider.setRange(min, max)
        self.slider.setValue(value)
    
        
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        
        self.setStyleSheet(hou.qt.styleSheet())
        self.setProperty('houdiniStyle', True)
        
        main = QtWidgets.QWidget(self)
        self.setCentralWidget(main)
        
        layout = QtWidgets.QVBoxLayout()
        main.setLayout(layout)
        
        self.slider = IntSliderGrp()
        self.slider.setLabel('スケールX')
        self.slider.setMinMax(0, 100, 1)
        layout.addWidget(self.slider)
        
        self.slider2 = FloatSliderGrp()
        self.slider2.setLabel('スケールY')
        self.slider2.setMinMax(0, 10, 1)
        layout.addWidget(self.slider2)
        
        b = QtWidgets.QPushButton('球体作成')
        b.clicked.connect(self.make)
        layout.addWidget(b)
        
    def make(self):
        obj = hou.node('/obj')
        g = obj.createNode('geo')
        s = g.createNode('sphere')
        t = g.createNode('xform')
        t.setInput(0, s)
        v = self.slider.value()
        t.parm('sx').set(v)
        v = self.slider2.value()
        t.parm('sy').set(v)
        

w = MainWindow()
w.show()



Home
abetmhr@gmail.com