梅尔按钮颜色ScriptJob?

时间:2019-03-28 00:04:01

标签: maya mel

mel的新手,我正在为Maya场景中的对象选择编写UI,我需要有关如何使用scriptjob在选择对象时将按钮颜色更改为白色以及在对象时恢复为默认颜色的帮助。被取消选择。只要选择了对象,按钮颜色就应保持白色。请根据以下代码提供解决方案。谢谢!

if (`window -exists MyPicker`) deleteUI MySelecter;
window -title "Item Selecter" -widthHeight 170 300 -sizeable false -mxb false MySelecter;
    formLayout -numberOfDivisions 100 MySelecter;{

        button -label "object1" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object1" object1_Btn;
        button -label "object2" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object2" object2_Btn;
        button -label "object3" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object3" object3_Btn;
        button -label "object4" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object4" object4_Btn;
        button -label "object5" -w 170 -h 44 -enable true -backgroundColor 0.820 0.360 0.161 -command "select object5" object5_Btn;               
    }
    formLayout -edit
        //object button
        -attachForm object1_Btn "top" 14
        -attachForm object1_Btn "left" 0

        -attachForm object2_Btn "top" 71
        -attachForm object2_Btn "left" 0

        -attachForm object3_Btn "top" 128
        -attachForm object3_Btn "left" 0

        -attachForm object4_Btn "top" 185
        -attachForm object4_Btn "left" 0

        -attachForm object5_Btn "top" 242
        -attachForm object5_Btn "left" 0

    MySelecter;
showWindow MySelecter;  

1 个答案:

答案 0 :(得分:0)

这个答案全在Python中,因此如果您坚持使用它,可以将其转换为MEL。

事件发生时,脚本作业可以多种方式触发。诸如时间更改,用户撤消操作或您的选择更改时,可能是这种情况。

通过运行以下命令,您可以获得这些事件名称的完整列表:

cmds.scriptJob(listEvents=True)

您要寻找的是"SelectionChanged"

要使其正常工作,您需要定义一个函数,该函数将在脚本作业触发时(选择更改时)被调用。这是一个简单的例子。

import maya.cmds as cmds


# Create a function that will be called from the script job whenever there's a change to the selection.
def func():
    print "The selection has changed!"

# Create a new script job and save the result to a variable. The result is the script job's id number.
script_job_id = cmds.scriptJob(event=["SelectionChanged", func])

# When it's no longer needed, pass the script job's id with the kill parameter to remove it.
#cmds.scriptJob(kill=script_job_id)

因此,在您运行该功能的情况下,它可以检查是否选中了该对象,并且可以根据是否选中该对象为按钮着色。

工具关闭时,您可以使用脚本的kill参数删除脚本作业,以便在不需要时不再运行脚本。

作为旁注,除非您有充分的理由,否则您是写给Haggi的,所以我只会使用Python而不是MEL。语法更容易,它拥有疯狂的库,并且做诸如操作字符串之类的简单功能更强大。再加上Python用于许多其他软件,而MEL不使用。确实有一些命令只能在MEL中完成,但是您可以使用Python轻松评估MEL字符串。