我创建了一个带有按钮的windowUI来运行2个函数,所以我定义了一个新函数来运行其他2个
def addSlider_splitLoop():
addSlider()
splitLoop()
mc.button(label ='Combo' , command = 'addSlider_splitLoop()' )
按下按钮时,只有1个功能有效:
当没有选择任何内容时,命令只运行addSlider()函数,
选择多边形循环时,该命令仅运行splitLoop()函数
这实际上有意义,但对我没有帮助,而改变顺序或功能也无济于事
我想强制它运行这两个函数,我该怎么做?
实际上最好的事情就是让splitSlider()只在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()
答案 0 :(得分:1)
这里发生了一些事情。
addSlider()
没有做任何工作来获取当前活动的GUI对象 - 取决于它运行时滑块可能出现在任何地方 - 在通道框中,在某些其他窗口,或者它可能会失败。这可能就是为什么功能似乎没有运行的原因:你只是在没有发现新滑块的任何地方。尝试添加调试打印。如果你想在其他命令之后运行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()
答案 1 :(得分:0)
你不应该在你的函数命令上加上逗号。 您可以尝试使用mc.evalDeferred('addSlider()\ nsplitLoop()')。 您可以使用try:except:finally:
由于我无法测试您的脚本,因此很难确定应该执行哪些功能。在我看来,这是一个空闲时间的问题,你应该抓住evalDeferred命令。
def addSlider_splitLoop():
addSlider()
splitLoop()
mc.button(label ='Combo' , command = addSlider_splitLoop)