Майя Python получить и использовать результат флажок

У меня есть скрипт, который просит пользователя выбрать ось симметрии с помощью флажков. Затем я хотел бы использовать этот результат в другой функции для создания инструмента зеркалирования. До сих пор, когда я пытаюсь запросить флажок, я получаю следующую ошибку:

RuntimeError: строка файла 81: объект xAxisBox не найдено

Я новичок, поэтому прошу прощения, если это очевидно, но где я иду не так?
Соответствующий код выглядит следующим образом:

    xAxisBox = cmds.checkBox(l="x")
    yAxisBox = cmds.checkBox(l="y")
    zAxisBox = cmds.checkBox(l="z")
    btAxis=cmds.button( label = "Do the thing!", command = "Blendy();")

    def Blendy ():

    xCheck = cmds.checkBox('xAxisBox', query=True, value = True)
    yCheck = cmds.checkBox('yAxisBox', query=True, value = True)
    zCheck = cmds.checkBox('zAxisBox', query=True, value = True)
    print xCheck
    print yCheck
    print zCheck

2 ответа

У меня нет Maya, поэтому я не могу проверить это для вас, но, глядя на ответ на другой вопрос, похоже, вам нужно использовать фактическую переменную python без кавычек (т.е. xAxisBox вместо 'xAxisBox'), как это:

xCheck = cmds.checkBox(xAxisBox, query=True, value = True)

Если вы используете cmds, вы можете ссылаться на жестко закодированные имена пользовательского интерфейса:

xAxisBox = cmds.checkBox("xAxisBox", l="x")
yAxisBox = cmds.checkBox("yAxisBox", l="y")
zAxisBox = cmds.checkBox("zAxisBox", l="z")
btAxis = cmds.button(label="Do the thing!", command=Blendy)

def Blendy ():

    xCheck = cmds.checkBox('xAxisBox', query=True, value=True)
    yCheck = cmds.checkBox('yAxisBox', query=True, value=True)
    zCheck = cmds.checkBox('zAxisBox', query=True, value=True)
    print xCheck
    print yCheck
    print zCheck

но с pymel вы можете попробовать это без жесткого кодирования:

xAxisBox = pm.checkBox(l="x")
yAxisBox = pm.checkBox(l="y")
zAxisBox = pm.checkBox(l="z")
btAxis = pm.button(
    label="Do the thing!",
    command=pm.Callback(Blendy, 
                        xAxis, yAxis, zAxis)
    )

def Blendy (xbox, ybox, zbox):

    xCheck = cmds.checkBox(str(xbox), query=True, value=True)
    yCheck = cmds.checkBox(str(ybox), query=True, value=True)
    zCheck = cmds.checkBox(str(zbox), query=True, value=True)
    print xCheck
    print yCheck
    print zCheck

Вы можете импортировать Pymel import pymel.core as pm

но если вы будете использовать pymel, я бы рекомендовал переписать функцию Blendy:

def Blendy(xbox, ybox, zbox):
    print xbox.getValue(), ybox.getValue(), zbox.getValue()

и последнее, и не в последнюю очередь вы можете использовать класс для хранения значений

и ответ от neelz с другого ресурса: использование модуля partial схема похожа на Callback:

from functools import partial
cmds.checkBox(onCommand=partial(func_without_parenthesizes, arg, arg))
Другие вопросы по тегам