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

Maya Python 3 UI开发遇Object not found错误,求排查解决

问题原因

Maya UI控件的changeCommand默认会把控件当前的数值作为第一个参数传入回调函数。你写的do_set_interval把第一个参数当成了控件IDbake_on_ifg,导致用输入的数字去查询intFieldGrp,自然会报“Object 'x' not found”的错误——因为Maya找不到名为数字的UI控件。

解决方案

通过lambda表达式或者functools.partial,手动把控件ID传递给回调函数,避免参数混淆。

方法1:使用Lambda包装回调

修改UI创建部分的changeCommand绑定,用lambda把控件ID传给do_set_interval:

import maya.cmds as cmds

def do_set_interval(bake_on_ifg, *args):
    interval = cmds.intFieldGrp(bake_on_ifg, q=True, value=1)
    print(f"烘焙采样间隔: {interval}")  # 验证输出

def create_ui():
    window = cmds.window(title="Reverse FK Tool", width=260)
    main_layout = cmds.columnLayout(adjustableColumn=True)
         
    bake_on_ifg = cmds.intFieldGrp(label="Bake FK on", parent=main_layout, changeCommand=lambda *args: do_set_interval(bake_on_ifg, *args))     

    cmds.showWindow(window)
    
if __name__ == "__main__":
    create_ui()

方法2:使用functools.partial

如果需要更清晰的参数绑定,可以用functools.partial:

import maya.cmds as cmds
import functools

def do_set_interval(bake_on_ifg, *args):
    interval = cmds.intFieldGrp(bake_on_ifg, q=True, value=1)
    print(f"烘焙采样间隔: {interval}")

def create_ui():
    window = cmds.window(title="Reverse FK Tool", width=260)
    main_layout = cmds.columnLayout(adjustableColumn=True)
         
    bake_on_ifg = cmds.intFieldGrp(label="Bake FK on", parent=main_layout, changeCommand=functools.partial(do_set_interval, bake_on_ifg))     

    cmds.showWindow(window)
    
if __name__ == "__main__":
    create_ui()
原理说明

两种方法都是为了覆盖Maya默认的参数传递逻辑,让回调函数先拿到正确的控件ID,再通过cmds.intFieldGrp查询数值,而不是把输入的数字当成控件ID去查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 09:55:54