Maya Python将多个功能集成到一个按钮

时间:2014-12-18 07:49:59

标签: python button maya function

我正在通过脚本创建一个装备,我有一个UI。我想将多个功能连接到一个按钮。或者更确切地说,在函数内部有一个函数。关于如何解决这个问题的任何建议?

我正在导入以下库:

import maya.cmds as cmds
from functools import partial

3 个答案:

答案 0 :(得分:0)

你能用一个小例子进一步解释你的做法吗?

我看到你想使用partial,所以你可能有多个变量要通过?

我的第一个想法是创建一个对多重函数进行分组的函数,即:

def temp01():
    return cmds.ls(sl=True)

def connection(obj01, obj02):
    someCommand(obj01, obj02)

def printor():
    print('yeah it is working')


def uiCommandButton_whatShouldIDoFunc(obj02, specialOkay, *args): 
    someCommand(temp01(), obj02)
    specialOkay() #should print message

button01 = cmds.button(c=partial( uiCommandButton_whatShouldIDoFunc, cmds.ls(sl=1)[-1]), printor )

答案 1 :(得分:0)

为了让事情变得干净整洁,我会使用处理程序

处理程序是在GUI元素上发生事件时调用的方法,如单击。在处理程序中,您可以执行任何操作(例如调用两个函数)。处理程序/事件处理程序是一种久经考验的GUI编程技术。

以下是一个例子:

my_button = cmds.button(command=partial(my_button_on_click_handler, arg1, arg2))

def my_button_on_click_handler(arg1, arg2):
    # call all your functions and do stuff here
    my_other_func1(arg1)
    my_other_func2(arg2)

关于这个主题的一些很棒的帖子(礼貌:@theodox和他很棒的博客): http://techartsurvival.blogspot.ca/2014/04/maya-callbacks-cheat-sheet.html?m=1

http://techartsurvival.blogspot.ca/2014/04/the-main-event-event-oriented.html?m=1

答案 2 :(得分:0)

使用PyMel和PySide / Qt有一种“脏”方式。

首先,将按钮变为Pymel按钮:

import pymel.core as pm
import pymel.core.uitypes as pui

pyBtn = pm.button(label="", etc...)
or
pyBtn = pui.PyUI(my_button)

然后,将其转换为QtObject:

qtBtn = pyBtn.asQtObject()

最后,您可以在单击按钮时添加功能:

qtBtn.clicked.connect(func1)
qtBtn.clicked.connect(partial(func2, arg1))
etc...

但就像我说的那样,这并不是真的推荐......这只是另一种方式。 我认为分享它可能会很有趣。 例如,如果UI已存在,则可以使用此解决方案,但无法访问创建它的代码。

否则,我会在其他答案中建议,创建处理程序函数。

PS:这只适用于maya2014及以上,或安装了PyQt的maya!