0

ユーザーがEnterキーを押した後、このウィンドウを適切に閉じる方法を知る必要があります。

txtA = cmds.textField(w = 345, h = 28, text = item, ec = renFc, aie = True)

Enter キーを押すと、この関数が呼び出されます。def ren():

cmds.deleteUI(renUI)refFc 関数に入れてみましたが、クラッシュします。

完全なコードは次のとおりです。

import maya.cmds as cmds

'''
Rename popup box for outliner - copy/paste this script into a hotkey field in the hotkey editor
'''


class ReUI():
    def __init__(self):

        renUI = 'renUI'

        if cmds.window(renUI, exists = True):
            cmds.deleteUI(renUI)

        renUI = cmds.window(renUI, t = 'JT Rename UI', sizeable = True, tb = True, mnb = False, mxb = False, menuBar = True, tlb = False, nm = 5)
        form = cmds.formLayout()
        rowA = cmds.rowColumnLayout(w = 350, h = 30)



        item = cmds.ls(os = True)[0]

        def ren():
            def renFc(self):
                print 'yes'
                tval = cmds.textField(txtA, text = True, q = True)
                cmds.rename(item, tval)

            txtA = cmds.textField(w = 345, h = 28, text = item, ec = renFc, aie = True)

        ren()

        cmds.showWindow(renUI)



r = ReUI()
4

1 に答える 1

2

残念ながら、あなたは小さなバグに遭遇しています..詳細については、ここのスレッドをチェックしてください: http://forums.cgsociety.org/archive/index.php/t-1000345.html .

リンクが切れた場合に備えて - 基本的に、2011/2012 では、Enter キーを押して deleteUI を呼び出すと、Maya/QT がクリーンアップを完了する前にオブジェクトが削除され、segfault タイプの状況が発生するという問題があるようです。

maya.utilsただし、これには一種の回避策があります。パッケージをインポートしてexecuteDeferred()コマンドを使用する必要があります ( http://download.autodesk.com/global/docs/maya2013/en_us/index.html?url=files/Python_Python_in_Mayaを参照)。 .htm,topicNumber=d30e725143 ) deleteUI 呼び出しの周り。2013年にチェックして、これがおそらく修正されているかどうかを確認してください。

コードを少しハッキングして、関連する行を挿入して動作をデモしましたが、その文字列「renUI」に大きく依存しています

(ああ、その関数 ren() は本当に役に立ちません..それを取り除き、そのブロックをインデント解除できます。)

import maya.utils # you need this line!
class ReUI():
    def __init__(self):

        renUI = 'renUI'

        if cmds.window(renUI, exists = True):
            cmds.deleteUI(renUI)

        renUI = cmds.window(renUI, t = 'JT Rename UI', sizeable = True, tb = True, mnb = False, mxb = False, menuBar = True, tlb = False, nm = 5)
        form = cmds.formLayout()
        rowA = cmds.rowColumnLayout(w = 350, h = 30)



        item = cmds.ls(os = True)[0]

        def ren():
            def renFc(self):
                print 'yes'
                tval = cmds.textField(txtA, text = True, q = True)
                cmds.rename(item, tval)
                maya.utils.executeDeferred("cmds.deleteUI('renUI')") # and this one!

            txtA = cmds.textField(w = 345, h = 28, text = item, ec = renFc, aie = True)

        ren()

        cmds.showWindow(renUI)



r = ReUI()
于 2012-10-06T14:54:59.477 に答える