intField不显示更改

时间:2017-03-25 15:56:42

标签: python-2.7 maya

我正在编写一个脚本来简化使用Vray时的繁琐任务,但我坚持使用intFields,它允许用户输入一个int值,当按下按钮时触发某个动作。我将代码简化为必要的部分。无论我将值更改为什么,它在脚本编辑器输出中始终为0.

import maya.cmds as cmds

idManagerUI = cmds.window(title='Vray ID Manager', s = False, wh = (300,500))

cmds.columnLayout(adj = True)

cmds.text (l = 'type in MultimatteID to select matching shaders \n or specify ObjectID to select matching objects \n __________________________________________ \n')

cmds.text (l = 'MultimatteID: \n')
cmds.intField( "MultimatteID", editable = True)
MultimatteIdButton = cmds.button(l = 'Go!', w = 30, h = 50, c = 'multimatteChecker()')
cmds.text (l = '\n')

cmds.showWindow(idManagerUI)

MultimatteIdInput = cmds.intField( "MultimatteID", q = True, v = True)


def multimatteChecker():
    print MultimatteIdInput

1 个答案:

答案 0 :(得分:0)

三件事:

首先,如您所写,您无法确定intField MultimatteID实际上是否获得了您认为应具有的名称。 Maya窗口小部件名称是唯一的,就像maya对象名称一样 - 您可以将其命名为MultimatteID但实际上会返回一个名为MultimatteID2的窗口小部件,因为您在某处(可见或不可见)具有未删除的窗口,并具有类似命名的控件。

其次,您粘贴的代码会在创建窗口后立即查询控件的值。它应该始终打印出你在创建时给它的值。

最后 - 不要在按钮中使用字符串版本的命令分配。当您从侦听器中的代码移动到工作脚本时,它是不可靠的。

这应该做你想要的:

    idManagerUI = cmds.window(title='Vray ID Manager', s = False, wh = (300,500))
    cmds.columnLayout(adj = True)
    cmds.text (l = 'type in MultimatteID to select matching shaders \n or specify ObjectID to select matching objects \n __________________________________________ \n')
    cmds.text (l = 'MultimatteID: \n')
    # store the intField name
    intfield = cmds.intField( "MultimatteID", editable = True)
    cmds.text (l = '\n')

    # define the function before assigning it. 
    # at this point in the code it knows what 'intfield' is....
    def multimatteChecker(_):
        print cmds.intField( intfield, q = True, v = True)

    #assign using the function object directly
    MultimatteIdButton = cmds.button(l = 'Go!', w = 30, h = 50, c = multimatteChecker)