ОК, здесь есть несколько вещей, которые нужно рассмотреть.
Во-первых, графические виджеты Maya выглядят как строки - точно так же, как вы создаете polyCube, и он возвращается к вам в виде строки 'pCube1', виджет возвращается в виде строки типа 'myWindow' или 'textField72».Так же, как и при работе с объектами сцены, вам всегда нужно захватывать результаты команды, чтобы вы знали, как она на самом деле называется - вы не можете гарантировать, что получите имя, о котором просили, поэтому всегда фиксируйте результаты.
Итак, вы хотите сделать что-то вроде этого, просто чтобы получить графику:
window = cmds.window(title='selection loader demo')
column = cmds.columnLayout(adj=True)
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)
load_button = cmds.button( label='Load Helper Joint')
cmds.show_window(window)
Если вам нужно спросить, например, что находится в textField, вы должны сделать:
text_contents = cmds.textField(sld_textFld, q=True, text=True)
Вы заметили, что это переменная , а не строка, поэтому мы уверены, что у нас все получилось.
Чтобы кнопка использовала эту информацию, кнопкаСкрипт должен иметь доступ к переменной.Есть несколько способов сделать это - это распространенный вопрос переполнения стека - но самый простой - просто определить команду кнопки, где у вас уже есть эта переменная.Таким образом, приведенный выше пример становится:
window = cmds.window(title='selection loader demo')
column = cmds.columnLayout(adj=True)
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)
def set_textfield(_):
sel = cmds.ls(selection=True)
add = cmds.textField(sld_textFld, edit=True, text=sel[0])
load_button = cmds.button( label='Load Helper Joint', c = set_textfield)
cmds.showWindow(window)
Здесь есть два бита.
Один - это _
в определении функции;Кнопки майя всегда вызывают свои функции с одним аргументом.В этом подчеркивании нет ничего магического, это просто сленг Python для «игнорировать меня» - но если у вас нет аргумента в функции def, он потерпит неудачу.
Более важный момент - кнопкадается определение функции напрямую, без кавычек .Вы говорите, что вызывает эту функцию при нажатии .Если вы используете строковую версию - удержание от MEL - вы столкнетесь с проблемами позже.Причины подробно объясняются здесь , но TLDR не использует строковую форму.Когда-либо.
Теперь, когда структурные элементы на месте, вы должны иметь возможность либо создать узел с помощью функции, которую я назвал set_textfield()
, либо создать вторую комбинацию кнопка \ функция, которая выполняет фактическое создание узла, что-токак:
window = cmds.window(title='selection loader demo')
column = cmds.columnLayout(adj=True)
sld_textFld = cmds.textField('sld_surfaceTextHJ', width =240)
def set_textfield(_):
sel = cmds.ls(selection=True)
cmds.textField(sld_textFld, edit=True, text=sel[0])
load_button = cmds.button( label='Load Helper Joint', c = set_textfield)
def make_node(_):
text_value = cmds.textField(sld_textFld, q = True, text=True)
if text_value:
print "created:", cmds.createNode('transform', n=text_value +'_firstGuy')
else:
cmds.warning("select an object and add it to the window first!")
node_button = cmds.button( label='Make Node', c = make_node)
cmds.showWindow(window)