44hero-01
11/14/2019 - 7:57 AM

-cmds- <maya UI> evalDeferred でmayaの遅延の回避!

#################################################
# 1.
import maya.cmds as cmds

class UI(object):
    def __init__(self):
        self.win = 'testUi'
    
    def createUI(self, *args):
        if cmds.window(self.win, q = True, ex = True):
            # cmds.evalDeferred(lambda *args:cmds.deleteUI(self.win))
            cmds.deleteUI(self.win)
        cmds.window(self.win)
        cmds.columnLayout(adj = True)
        cmds.button(label = 'close ui', c = self.close)  # partial(self.close)
        cmds.button(label = 'reload ui', c = self.reload)  # partial(self.reload)
        # cmds.showWindow(self.win)
        cmds.evalDeferred(lambda *args:cmds.showWindow(self.win))

    def reload(self, *args):
        # self.createUI()
        cmds.evalDeferred(lambda *args: self.createUI())
        print('reload done')
        
    def close(self, *args):
        cmds.evalDeferred(lambda *args:cmds.deleteUI(self.win))
        print('close done')   
        
    
if __name__ == '__main__':
    print(u'{}.py: loaded as script file'.format(__name__))
    UI().createUI()
else:
    print(u'{}.py: loaded as module file'.format(__name__))

#################################################
# 2.
import maya.cmds as cmds

class UI(object):
    @classmethod
    def showUI(cls):
        win = cls()
        win.createUI()
        return win

    def __init__(self):
        self.win = 'testUi'
    
    def createUI(self, *args):
        if cmds.window(self.win, q = True, ex = True):
            # cmds.evalDeferred(lambda *args:cmds.deleteUI(self.win))
            cmds.deleteUI(self.win)
        cmds.window(self.win)
        cmds.columnLayout(adj = True)
        cmds.button(label = 'close ui', c = self.close)  # partial(self.createUI)
        cmds.button(label = 'reload ui', c = self.reload)  # partial(self.createUI)
        # cmds.showWindow(self.win)
        cmds.evalDeferred(lambda *args:cmds.showWindow(self.win))

    def reload(self, *args):
        # self.showUI()
        cmds.evalDeferred(lambda *args: self.showUI())
        print('reload done')
        
    def close(self, *args):
        cmds.evalDeferred(lambda *args:cmds.deleteUI(self.win))
        print('close done')   
        
    
if __name__ == '__main__':
    print(u'{}.py: loaded as script file'.format(__name__))
    UI.showUI()
else:
    print(u'{}.py: loaded as module file'.format(__name__))