【问题标题】:Maya Python multiple functions to one buttonMaya Python 多个功能到一键
【发布时间】:2014-12-18 07:49:58
【问题描述】:

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

我正在导入以下库:

import maya.cmds as cmds
from functools import partial

【问题讨论】:

  • 您选择的 GUI 库是什么?也不清楚您所说的“多功能”是什么意思。你的意思是你按下一个按钮,它会调用两个函数?

标签: python button maya function


【解决方案1】:

你能用一个小例子进一步解释你要做什么吗?

我看到你想使用部分,所以你可能有多个变量要传递?

我的第一个想法是创建一个函数来分组你的倍数函数,即:

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 )

【讨论】:

    【解决方案2】:

    为了让事情变得干净整洁,我会使用 handlers

    处理程序是一种在您的 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

    【讨论】:

    【解决方案3】:

    使用 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!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多