如何在Maya Python中打印用户输入的intField值?
解决Maya中Python读取intField值并打印的问题
你的代码没法正确获取并打印intField的输入值,核心问题是**changeCommand的绑定方式错误**——用字符串'fun()'调用函数时,Maya不会自动把输入的数值传递给函数,而且这种字符串调用的方式也没法正确接收参数。下面给你两种简单的修复方案:
方案一:直接绑定函数(推荐,最简洁)
Maya的intField组件的changeCommand默认会把当前输入的数值作为参数传递给绑定的回调函数,所以我们直接把函数对象传给它就行,不用加引号和括号:
import maya.cmds as cmds def fun(number): print(number) cmds.window() cmds.columnLayout() # 直接绑定函数对象,Maya会自动传值 cmds.intField(changeCommand=fun) cmds.showWindow()
测试一下:当你在intField里输入数字或者调整上下箭头时,控制台会立刻打印出当前的数值。
方案二:通过控件名称查询值(适合需要操作控件的场景)
如果之后你需要对这个intField做更多操作(比如修改它的其他属性),可以先保存控件的名称,再在回调里通过名称查询当前值:
import maya.cmds as cmds def fun(field_name): # 用query=True查询控件的当前值 current_value = cmds.intField(field_name, query=True, value=True) print(current_value) cmds.window() cmds.columnLayout() # 保存创建的intField控件名称 num_field = cmds.intField() # 用lambda把控件名称传给回调函数 cmds.intField(num_field, edit=True, changeCommand=lambda x: fun(num_field)) cmds.showWindow()
这种方式更灵活,比如你可以在fun函数里给这个控件设置默认值、禁用它等等。
为什么原代码不行?
原代码里changeCommand='fun()'是用字符串形式调用函数,这种方式属于全局字符串执行,Maya不会自动传递intField的数值参数,而且fun()调用时没有传参,自然无法打印出输入的值。
内容的提问来源于stack exchange,提问作者python
相关产品推荐
相关产品推荐

