使用python启用或禁用maya ui中的字段

时间:2015-01-11 15:40:03

标签: python user-interface maya

我正在尝试在maya的python脚本的ui中启用/禁用浮点字段,但我不知道它是如何完成的。这是一个例子:

import maya.cmds as cmds

def createUI(windowTitle):

    windowID = 'myWindoWID'

    if cmds.window(windowID, exists = True):
        cmds.deleteUI(windowID)

    cmds.window( windowID, title = windowTitle, sizeable = False, resizeToFitChildren = True) 

    cmds.rowColumnLayout(numberOfColumns = 3, columnWidth = [(1,120), (2,120), (3,120)])

    cmds.floatField(enable = False)
    cmds.button(label = 'enable the float field', command = enableFloatField)
    cmds.button(label = 'disable the float field', command = disableFloatField)        

    cmds.showWindow()

def enableFloatField(*args):
    #enable the float field
    print 'float field enabled'


def disableFloatField(*args):
    #disable the float field
    print 'float field disabled'


createUI('my window')

1 个答案:

答案 0 :(得分:1)

首先将浮动字段存储在变量中。

my_float_field = cmds.floatField(enable = False)

我们使用functools.partial将此变量传递给按钮的命令方法。

cmds.button(label = 'enable the float field', command = partial(enableFloatField, my_float_field))
cmds.button(label = 'disable the float field', command = partial(disableFloatField, my_float_field))

在您的方法中,我们然后在编辑模式下调用cmds.floatField()并编辑您作为参数发送的特定浮点字段。

def enableFloatField(float_field, *args):
    #enable the float field
    cmds.floatField(float_field, edit=True, enable=True)


def disableFloatField(float_field, *args):
    #disable the float field
    cmds.floatField(float_field, edit=True, enable=False)

请记住导入functools。

from functools import partial

所以你的整个代码将是:

from functools import partial
import maya.cmds as cmds

def createUI(windowTitle):

    windowID = 'myWindoWID'

    if cmds.window(windowID, exists = True):
        cmds.deleteUI(windowID)

    cmds.window( windowID, title = windowTitle, sizeable = False, resizeToFitChildren = True) 

    cmds.rowColumnLayout(numberOfColumns = 3, columnWidth = [(1,120), (2,120), (3,120)])

    my_float_field = cmds.floatField(enable = False)
    cmds.button(label = 'enable the float field', command = partial(enableFloatField, my_float_field))
    cmds.button(label = 'disable the float field', command = partial(disableFloatField, my_float_field))

    cmds.showWindow()

def enableFloatField(float_field, *args):
    #enable the float field
    cmds.floatField(float_field, edit=True, enable=True)


def disableFloatField(float_field, *args):
    #disable the float field
    cmds.floatField(float_field, edit=True, enable=False)


createUI('my window')

cmds.floatField(float_field, edit=True, enable=False)中需要注意的重要事项是edit=True标志。此标志以edit模式调用UI方法,这意味着您传递到此UI方法的任何参数将用于编辑现有的UI元素,这将是该方法的第一个参数;在这种情况下float_field,其中包含您的浮点字段的名称,可能类似于'myWindoWID|rowColumnLayout6|floatField11'

另一个这样的模式标志是query=True,它可以让你查询UI元素的参数。如果这两个标志都不存在,Maya将假定该方法是在create模式下调用的。

希望这有帮助。