1

別のメソッドを呼び出しています。そして、私が得ているこのスクリプトのエラーは

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

4 に答える 4

2

問題は、mnDialogが から検索されていないことmnMakeWinです。名前を渡しているため、後で正しいスコープにいないときに検索されます。

名前の代わりに関数を渡すとうまくいくかもしれません。Maya がインストールされていないため、試すことができません。

それ以外の場合は、グローバルスコープで mnDialog を定義する必要がありますが、これは私には奇妙な制限のようです

于 2009-12-07T21:26:22.307 に答える
1

mnDialogのローカル変数ですmnProgRun。関数スコープ外ではアクセスできません。必要に応じて、適切なスコープで定義してください。

(Python にグローバル変数とローカル変数の宣言があるという印象はありませんでした。)

あなたは間違った印象を持っています。

于 2009-12-07T21:21:56.667 に答える
1

mnDialogトップレベルで定義する必要があります。正しい名前空間にありません。

また、Python で関数をネストすると、(ほとんど) 常に不必要に複雑になります。

于 2009-12-07T21:22:09.850 に答える
0

Maya は常にスクープに問題があります。関数の外側で mnDialog() と mnMakeWin() を最上位のスクープ レベルで定義できます。その Maya の問題は Python からではなく、maya ui コマンド (ex ボタン イベント) からクラス メソッドを呼び出すときに問題に直面したためです。 )。

それがあなたを助けることを願っています:)

##編集

maya.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()

于 2009-12-08T07:53:47.040 に答える