Python 在Maya中调用函数的按钮

Python 在Maya中调用函数的按钮,python,python-2.7,maya,Python,Python 2.7,Maya,我试图在一个函数中创建一个按钮,调用类中的另一个函数 我就是这么做的: # button calling functions import maya.cmds as cmds import maya.mel as mel from functools import partial class B: def __init__(self): self.create_window() def printText(self, text, *args):

我试图在一个函数中创建一个按钮,调用类中的另一个函数

我就是这么做的:

# button calling functions
import maya.cmds as cmds
import maya.mel as mel
from functools import partial

class B:
    def __init__(self):
        self.create_window()

    def printText(self, text, *args):
        print(text)
        return

    def create_window(self):
        window = cmds.window()
        cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 50), (1, 70)])
        cmds.text(label='Name')
        axis = cmds.textField()
        cmds.showWindow(window)
        text_entered = cmds.textField(axis, query=True, text=True)
        #cmd = 'printText("{0}")'.format(text_entered)
        cmds.button(label="asd", command = partial(self.printText, text_entered))
        return       

a = B()

问题是我什么也没印出来。我做错了什么?

如果可以让文本字段成为类的成员变量,我不明白为什么需要分部函数

def printText(self, _ignored):
    print(">>" + self.text_entered)  # note this is an object, not the contents 
    return

def create_window(self):
    window = cmds.window()
    cmds.rowColumnLayout(numberOfColumns=2, columnWidth=[(1, 50), (1, 70)])
    cmds.text(label='Name')
    axis = cmds.textField()
    cmds.showWindow(window)
    self.text_entered = cmds.textField(axis, query=True, text=True)
    #cmd = 'printText("{0}")'.format(text_entered)
    cmds.button(label="asd", command =self.printText)
    return 

找到了一个解决方案但我觉得有点奇怪

import maya.cmds as cmds

class B:
    def __init__(self):
        self.create_window()

    def create_window(self):
        if cmds.window("UI", exists=True):
            cmds.deleteUI("UI")
        win = cmds.window("UI")
        cmds.columnLayout()
        textEntered = cmds.textField()

        def print_text_contents(a):
            print cmds.textField(textEntered, query=True, text=True)

        cmds.button(label='Confirm', command=print_text_contents)
        cmds.showWindow(win)


B()

您没有获得输入的
文本的内容,您正在打印一个objectit返回一个字符串通知flagsThank您的答案,但是您的代码在maya中给出了一个错误。不能在命令参数中调用函数。无论如何,我真的很想知道如何使用分部函数实现这一点。我不是在调用函数,而是在向函数传递句柄,分部函数就是这样做的。你是从一个TextField创建了一个新的TextField吗?这是怎么回事?我的回答有什么错误?我不是从文本字段创建文本字段。在获取特定textField的文本时,请查看文档:根据您使用的标志,cmds.textField可以返回在指定textField中输入的文本字符串,在我的示例中,textEntered是一个对象。注意,“查询”标志设置为True。我希望我能更好地解释它。这是合法的(尽管按照惯例,您希望在
print\u text\u contents
中使用“\u”作为忽略的参数。Reasons@cricket\u 007我认为您在创建时捕获了文本字段内容的值(因此它是一个空字符串)然后报告捕获的值。如果您想要重新查询,您需要lambda或闭包,这就是OP的修订版工作的原因