запуск метода в другом методе. питон - PullRequest
1 голос
/ 08 декабря 2009

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

NameError: name 'mnDialog' is not defined

Есть ли причина для этого? Я думаю, что это как-то связано с выполнением команды, которая не на глобальном уровне. (У меня не было впечатления, что у python есть объявление глобальной и локальной переменной.) Каков правильный синтаксис или обходной путь? спасибо за ваше время.


import maya.cmds as cmds
def mnProgRun():
    def mnDialog(*args):
        cmds.confirmDialog( title='Confirm', message='Are you sure?',button=['Yes','No'], defaultButton='Yes',cancelButton='No',dismissString='No' )
    def mnMakeWin():
        cmds.window( 'mnWin', title = 'testman', wh=(260,100))
        cmds.columnLayout(adjustableColumn=False, columnAlign='center')
        cmds.button( label="Yes,it works",align='center',width=120,height=25, backgroundColor=[0.5,1,0.5],command='cmds.scriptJob( event=["SelectionChanged","mnDialog"])')
        cmds.button( label="No, Thank You!",align='center',width=120,height=25, backgroundColor=[1,0.5,0.5],command='cmds.deleteUI("mnWin")')
    cmds.showWindow( 'mnWin' )
    mnMakeWin()
mnProgRun()

Ответы [ 4 ]

2 голосов
/ 08 декабря 2009

Проблема в том, что mnDialog не ищется от mnMakeWin, вы передаете имя, и оно ищется позже, когда вы находитесь не в нужной области.

Это может работать, чтобы передать функцию вместо имени. У меня не установлена ​​Maya, поэтому я не могу попробовать.

В противном случае вам придется определить mnDialog в глобальной области видимости, что кажется мне странным ограничением

1 голос
/ 08 декабря 2009

Вы должны определить mnDialog на верхнем уровне. Это не в правильном пространстве имен.

Кроме того, это (почти) всегда излишне усложняет вложение функций в Python.

1 голос
/ 08 декабря 2009

mnDialog является локальной переменной в mnProgRun. Он недоступен за пределами области действия функции. Если вы хотите, чтобы это было, определите его в соответствующей области.

(у меня не было впечатления, что в python есть объявление глобальной и локальной переменной.)

У вас неверное впечатление.

0 голосов
/ 08 декабря 2009

майя всегда имеет проблемы с совками, вы можете определить mnDialog () и mnMakeWin () вне функции, на верхнем уровне совка, Это проблема Maya, а не Python, поскольку я столкнулся с проблемой при вызове методов класса из команды Maya UI (событие ex button).

надеюсь, что это поможет вам:)

## * редактировать +1005 *

import maya.cmds as cmds

def mnDialog(*args):

    cmds.confirmDialog( title='Confirm', message='Are you sure?',button=['Yes','No'],

                          defaultButton='Yes',cancelButton='No',dismissString='No' )

def mnMakeWin():

    cmds.window( 'mnWin', title = 'testman', wh=(260,100))

    cmds.columnLayout(adjustableColumn=False, columnAlign='center')

    cmds.button( label="Yes,it works",align='center',width=120,height=25, 
                 backgroundColor=[0.5,1,0.5],command='cmds.scriptJob( event=
                   ["SelectionChanged","mnDialog"])')

    cmds.button( label="No, Thank You!",align='center',width=120,height=25, 
                backgroundColor=[1,0.5,0.5],command='cmds.deleteUI("mnWin")')

    cmds.showWindow( 'mnWin' )

def mnProgRun ():

    mnMakeWin()

# пробег

mnProgRun ()

...