我正在尝试在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')
答案 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
模式下调用的。
希望这有帮助。