self.setWindowTitle("几何体创建-缩放工具箱")
self.setMinimumSize(100, 100)
创建一个QDialog,名为几何体缩放工具箱。定义初始尺寸。
main_layout = QVBoxLayout(self)
# 布局比例:文字15% 滑块75% 输入框10%
one = 15
two = 75
three = 10
定义了一个竖排版,布局比例为100%

# 整体缩放 映射 0.1~10.0 小数
self.sliderS = QSlider(Qt.Horizontal)
self.sliderS.setRange(1, 100)
self.sliderS.setValue(10)
self.line_scale = QLineEdit("1.0") # str
scale_layout = QHBoxLayout()
self.QLabel = QLabel("整体缩放:")
scale_layout.addWidget(self.QLabel, stretch=one)
scale_layout.addWidget(self.sliderS, stretch=two)
scale_layout.addWidget(self.line_scale, stretch=three)
定义了这个类的滑杆,为滑杆缩放,范围为1-100
定义了输入框,初始值为1.0
定义了一个虚拟盒子

stretch:百分比占比
# 按钮
btn_layout = QHBoxLayout()
self.btn_1 = QPushButton("创建方体")
self.btn_2 = QPushButton("创建球体")
self.btn_3 = QPushButton("创建柱体")
self.btn_4 = QPushButton("创建锥体")
btn_layout.addWidget(self.btn_1)
btn_layout.addWidget(self.btn_2)
btn_layout.addWidget(self.btn_3)
btn_layout.addWidget(self.btn_4)
定义了一个布局,又定义了四个按钮并起名
# 布局
main_layout.addLayout(scale_layout)
main_layout.addLayout(btn_layout)
进行布局
# 桥接
self.sliderS.valueChanged.connect(self.sliderChange)
self.line_scale.textChanged.connect(self.textChange)
self.btn_1.clicked.connect(self.cre_cube)
self.btn_2.clicked.connect(self.cre_sphere)
self.btn_3.clicked.connect(self.cre_cylinder)
self.btn_4.clicked.connect(self.cre_Cone)
第一个桥接的是滑杆,当值被改变后,连接下一个
第二个是输入框,文字改变后连接
后四个都是按钮,点击后连接
def sliderChange(self, value):
# 滑块值转小数 0.1~10.0
val = value * 0.1
self.line_scale.setText(f"{val:.1f}")
self.changeNum()
联动滑杆与输入框。换算后保留小数后一位进行传值
def textChange(self, text):
# 提升鲁棒性,防止乱输入
try:
val = float(text) # str→ float "1"→1
if 0.1 <= val <= 10.0:
self.sliderS.setValue(int(val * 10)) # 10
self.changeNum()
如果是正确的,就执行下面的语句。如果是错误的就pass(无反应,不报错)

def cre_cube(self):
obj = cmds.polyCube(
n = "myCube",
w=1, h=1, d=1
)[0]
cmds.select(obj)
self.changeNum()
定义了一个类函数cre_cube
创建了一个几何体,起名为myCube,并选择,改变它的数值
selected = cmds.ls(selection=True, long=True)
if not selected:
return
若获取到,就执行。若未获取到,就返回
def changeNum(self):
# 获取当前缩放值
try:
scale = float(self.line_scale.text()) # 类函数,获取值
except:
return
将获取到的值转化为小数的,赋值给scale
# 获取选中物体
selected = cmds.ls(selection=True, long=True)
if not selected:
return
# 缩放选中物体
cmds.scale(
scale, scale, scale,
selected,
absolute=True
)
获取选中的,未获取到就return
缩放xyz轴。absolute:按相对缩放
# 运行窗口
global window1
# 每次只运行1个窗口
try:
window1.close()
except:
pass
window1 = sliderTool_Scale()
最后定义一个window1,实例化这个类