为我以前的脚本创建UI窗口

时间:2014-01-15 19:33:03

标签: python user-interface input window maya

人们!所以,多亏你们,我能够弄清楚我在以前的场景中选定对象的动画错误剧本中做错了什么。我现在正处于这个小练习的第二部分:为它创建一个UI。

这涉及创建一个带有按钮的窗口,以及用户输入动画将交错的程度。因此,我现在允许用户决定,而不是我把交错增加多少(在我之前的脚本中是两个)。我现在允许用户决定。

我到目前为止的脚本正确地创建了窗口,按钮和输入,虽然我在使UI正确执行时遇到了一些麻烦,这意味着当我点击按钮时,没有弹出错误;事实上,没有任何事情可以改变现场。我感觉这是因为我没有在正确的位置使用增量变量,或者没有正确使用它,但我不确定在何处/如何准确地解决它。任何帮助将不胜感激。

我的代码(建议编辑)如下:

import maya.cmds as cmds

spheres = cmds.ls(selection=True)

stagWin = cmds.window(title="Stagger Tool", wh=(300,100))
cmds.columnLayout()
button = cmds.button(label="My Life For Aiur!")
count = cmds.floatFieldGrp(fieldgroup, query=True, value=True)
fieldgroup = cmds.floatFieldGrp(numberOfFields=1)
cmds.button(button, edit=True, command=lambda _:stagger(fieldgroup))
cmds.showWindow(stagWin)

def stagger(fieldgroup):
    for i in spheres:
        cmds.selectKey(i)
        cmds.keyframe(edit=True, relative=True, timeChange=count)
    print "BLAH"

1 个答案:

答案 0 :(得分:0)

将评论转移到答案中,因为我认为我最终弄清楚了这一点:

首先,更好的做法是将交错对象传递给按钮命令而不是字符串。所以那将是:

cmds.button(label="My Life For Aiur!", command=stagger)

其次,计数未更新,因此根据您的第三行保持0。要更新:

count = cmds.floatFieldGrp(fieldgroup, query=True, value=True)

但等等,fieldgroup来自哪里?我们需要将它传递给函数。所以回到你的按钮代码并完全取出命令,同时将对象保存到变量:

button = cmds.button(label="My Life For Aiur!")

现在,当您创建对象时,请存储该字段组的对象:

fieldgroup = cmds.floatFieldGrp(numberOfFields=1)

现在你有了fieldgroup,你可以在按钮的函数中传递它,如下所示:

cmds.button(button, edit=True, command=lambda _:stagger(fieldgroup))

我必须将函数包装在lambda中,因为我们正在传递fieldgroup,但是如果我只是放stagger(fieldgroup)它会调用它并将结果传递给按​​钮的命令

还使用fieldgroup参数更新交错def:

def stagger(fieldgroup):

最后一点不会影响到这一点,但很高兴知道:

当您移动stagger内的关键帧时,您使用的是与上面声明为0的变量不同的计数变量。外部是global,内部是local范围。一般来说,最好首先避免全球化,幸运的是,这意味着只需要取出count = 0


将所有内容放在一起:

import maya.cmds as cmds

spheres = cmds.ls(selection=True)

stagWin = cmds.window(title="Stagger Tool", wh=(300,100))
cmds.columnLayout()
button = cmds.button(label="My Life For Aiur!")
fieldgroup = cmds.floatFieldGrp(numberOfFields=1)
cmds.button(button, edit=True, command=lambda _:stagger(fieldgroup))
cmds.showWindow(stagWin)

def stagger(fieldgroup):
    count = 0
    increment = cmds.floatFieldGrp(fieldgroup, query=True, value=True)[0]
    print count
    for i in spheres:
        cmds.selectKey(i)
        cmds.keyframe(edit=True, relative=True, timeChange=count)
        count += increment
    print "BLAH"