python maya,函数调用2个函数,强制同时运行

神经节酮

我用一个按钮来运行一个windowUI来运行2个函数,所以我定义了一个新函数来运行其他2个函数

def addSlider_splitLoop():
    addSlider()
    splitLoop()

mc.button(label ='Combo' , command = 'addSlider_splitLoop()' )

当按下按钮时,只有一种功能起作用:

  • 如果未选择任何内容,则该命令仅运行addSlider()函数,

  • 选择多边形循环时,该命令仅运行splitLoop()函数

这实际上是有道理的,但对我没有帮助,并且更改功能的顺序也无济于事

我想强制它运行两个功能,我该怎么做?

实际上最好的办法是让addSlider()仅在splitLoop()工作时才能运行,但是我是一个真正的初学者,我不知道如何执行此操作...强制运行这两个函数可能很脏解决方案,但目前对我来说已经足够

无论如何,这是完整的代码(组合按钮仅用于测试)

import maya.cmds as mc

def addSlider_splitLoop():
        addSlider()
        splitLoop()    




def addSlider():
        mc.floatSliderGrp( minValue = 1.00 , maxValue = 99.00 , value = 50.00 , field = True )

def splitLoop():    
        mc.ConvertSelectionToContainedEdges()
        mc.polySplitRing(sma = 180 , wt = 0.5)
        mc.polyDuplicateEdge(ch = True , of = loopDistance() )
        #addSlider()




def doubleLoop():
        mc.ConvertSelectionToContainedEdges()
        mc.polySplitRing(sma = 180 , wt = 0.5)
        mc.polyDuplicateEdge(ch = True , of = loopDistance() )
        mc.polyDelEdge(e = False, cv = True,)
        #addSlider()

def loopDistance():
        distance =  mc.floatSliderGrp('LoopDistanceValue' , query = True, value = True)
        convertedDistance = distance / 100
        return convertedDistance    



def splitLoopUI():

        if mc.window('splitLoopUI' , exists = True):
            mc.deleteUI('splitLoopUI')

        mc.window('splitLoopUI')

        mc.frameLayout( label='                            set loop distance')
        mc.floatSliderGrp('LoopDistanceValue' , minValue = 1.00 , maxValue = 99.00 , value = 50.00 , field = True )    

        mc.button(label ='Triple Loop' , command = 'splitLoop()' ) 
        mc.button(label ='Double Loop' , command = 'doubleLoop()' )
        mc.button(label ='Combo' , command = 'addSlider_splitLoop()' )

        mc.text( label=' +   edit loop distance   + ')

        mc.scrollLayout( 'scrollLayout' )
        mc.columnLayout( adjustableColumn=True )


        mc.showWindow('splitLoopUI')
splitLoopUI()
经纬仪

这里发生了几件事。

  1. 不要将脚本称为字符串,这是解决问题的秘诀。而是传递函数对象,如@ Dr.Weeny的示例。它更可靠,实际上也更快。这里更多
  2. 在发布的代码addSlider()中,获取当前处于活动状态的GUI对象不做任何工作-根据其运行时间,该滑块可能会显示在任何位置-在通道框中,其他窗口中,否则可能会失败。这可能就是为什么函数似乎没有运行的原因:您只是没有发现新的滑块在哪里结束。尝试添加调试打印。
  3. 如果要addSlider()在其他命令之后运行,最简单的操作可能是让所有工具命令都返回一个值,指示它们成功或失败:

    def splitLoop():    
        try:
            mc.ConvertSelectionToContainedEdges()
            mc.polySplitRing(sma = 180 , wt = 0.5)
            return mc.polyDuplicateEdge(ch = True , of = loopDistance() )
         except:
             return None
    
    def addSlider_splitLoop():
        if splitLoop():
            addSlider()    
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章