尝试将变量传递给函数内部的函数。Python

2024-04-24 01:31:21 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些限制,我不能像平常一样使用类来完成这个任务。在

我需要给一个函数传递一个变量,但是这个函数在另一个函数中。在

这是我使用的代码,请温柔一点,我不是python向导,我是自学成才的。我遇到的问题是nButtons在函数重新着色时返回False。在

import maya.cmds as cmds

nButtons = 4

def ColorMeButtonsUI(nButtons):
    def reColor(nButtons):
        for i in range(nButtons):
            cmds.button(str(i), edit = True, bgc = (1,1,1))

    if cmds.window('colorUI', exists= True):
        cmds.deleteUI('colorUI')

    if not nButtons:
        nButtons = 3

    if nButtons >= 2 and nButtons < 10:
        colorUI = cmds.window('colorUI', title='Color me, Buttons', widthHeight=(200, 55), rtf = True  )
        cmds.columnLayout( adjustableColumn=True)
        cmds.button('Color', label='Color', command = reColor)
        for i in range(nButtons):
            cmds.button(str(i), label = 'Color'+str(i+1))
        cmds.setParent( '..' )
        cmds.showWindow( colorUI )
    else:
        cmds.error ('Input is invalid. Please confirm input >1 and <10')
    return nButtons

ColorMeButtonsUI(nButtons)

编辑:命令正在由GUI按钮运行:cmds.button('Color', label='Color', command = reColor)


Tags: 函数intrueforifdefbuttonlabel
2条回答

欢迎来到stackoverflow,你已经尝试不重复自己和迭代一个范围来编辑bgc,很好。{1通常使用你创建的dagui元素来调用它。Instance iterate使用更多信息迭代dict中的项以供处理的范围。在

import maya.cmds as cmds
nButtons = 5
# create a dict for the buttons
ui_dict  = {}
def ColorMeButtonsUI(nButtons):
    def reColor(*args):
        # iterate the dict with the created buttons inside 
        for ui_id, ui_dag in ui_dict.iteritems():
            print ui_id, ui_dag
            # and edit ther color
            cmds.button(ui_dag, edit = True, bgc = (1,1,1))
            # you can also search for ids eg:
            if str(2) in str(ui_id):
               print ui_dag

    if cmds.window('colorUI', exists= True):
        cmds.deleteUI('colorUI')

    if not nButtons:
        nButtons = 3
    # you can also use
    # if 10>nButtons>= 2:
    if nButtons >= 2 and nButtons < 10:
        colorUI = cmds.window('colorUI', title='Color me, Buttons', widthHeight=(200, 55), rtf = True  )
        cmds.columnLayout( adjustableColumn=True)
        cmds.button('Color', label='Color', command = reColor)
        #use the range start,end 
        for i in range(1,nButtons):
            #create a relativ linking instance hard coded ids
            #add element to dict 
            # we stay on your case and add the index too(not more needed except searching)
            ui_dict[(i)] = cmds.button(label = 'Color'+str(i))
        cmds.setParent( '..' )
        cmds.showWindow( colorUI )
    else:
        cmds.error ('Input is invalid. Please confirm input >1 and <10')
    return nButtons

ColorMeButtonsUI(nButtons)

我建议您避免在其他函数中创建函数。在

如果在外部添加函数:

def reColor(nButtons):
        for i in range(nButtons):
            cmds.button(str(i), edit = True, bgc = (1,1,1))


def ColorMeButtonsUI(nButtons): 
(...)

您将能够使用从内部颜色按钮重新着色。在

另外,请注意,除非使用

^{pr2}$

然后对该命令参数使用partial()。 我建议你读this other post。在

我的建议,仅供记录:

  • 注意辨认。每个标识级别4个空格。没有标签。在
  • 不要在函数定义中使用大写字母。只用于类名。所以应该是“colorMeButtonsUI”。在
  • 如果只打算在colorMeButtons中使用重新着色,则可以将其称为“重着色”(nButtons),以便它是私有的(不是完全私有的,因为Python没有类似的方法,只是在该文件的可用组件列表中隐藏函数名)。或者只需使用一个下划线重新着色,以注意此函数仅用于此文件内部。在

相关问题 更多 >