You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt-Maya脚本:将QPushButton标签作为函数参数统一绑定按钮

解决方案

问题1:列表应使用字符串还是变量?

直接用按钮实例变量。通过.ui文件初始化后,所有界面控件都会成为MainWindow的实例属性(比如self.grpSuffix_pushButton),直接引用这些变量能准确获取到按钮对象,比用字符串再通过getattr查找更简洁可靠。

问题2:如何将按钮标签关联到函数的suffix参数?

QPushButton的clicked信号默认只传递一个布尔值(表示按钮是否处于按下状态),没法直接传自定义参数。可以用functools.partial或者lambda表达式,把每个按钮对应的suffix参数绑定到QuickSuffix函数上。

修正后的完整代码

from functools import partial
from PySide2.QtWidgets import QMainWindow
import pymel.core as pm

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.connectSignalsSlots()

    def connectSignalsSlots(self):
        # 用元组列表存储按钮与对应后缀的映射,逻辑清晰易维护
        button_suffix_pairs = [
            (self.grpSuffix_pushButton, "_GRP"),
            (self.setSuffix_pushButton, "_SET")  # 替换为你实际需要的后缀
        ]
        for button, suffix in button_suffix_pairs:
            # 通过partial绑定固定参数,点击按钮时自动传入对应suffix
            button.clicked.connect(partial(self.QuickSuffix, suffix))

    def QuickSuffix(self, suffix):
        # 根据后缀筛选目标节点
        if suffix == "_GRP":
            selection = pm.ls(selection=True, excludeType="reference")
        else:
            selection = pm.ls(selection=True, referencedNodes=True)
        
        # 批量重命名(原代码直接传suffix会覆盖节点名,这里改为添加后缀)
        for asset in selection:
            pm.rename(asset, f"{asset}_{suffix}")

关键细节说明

  1. 用元组列表绑定按钮和后缀,每个按钮的对应关系一目了然,后续新增按钮只需在列表里加一行即可。
  2. functools.partial可以把固定参数提前绑定到函数上,完美解决信号传参的问题,比lambda更不易出现变量捕获的坑。
  3. 修正了原代码重命名逻辑的错误:直接传suffix会把节点名替换成后缀字符串,改为f"{asset}_{suffix}"实现给原名称添加后缀的需求(如果需要替换后缀或其他逻辑,可自行调整格式)。

内容的提问来源于stack exchange,提问作者Lilian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:33:28