在窗口中创建动态按钮

时间:2015-09-04 11:28:34

标签: python button dynamic maya pymel

我正在尝试根据场景中存在的灯光数量在窗口中创建按钮。 当我按下创建按钮时,我收到此错误(#RuntimeError:未指定对象名称。#):

  

回溯(最近一次调用最后一次):文件“C:\ Program   文件\欧特克\ Maya2015 \ Python的\ LIB \站点包\ pymel \内部\ factories.py”   第779行,在回调中       res = origCallback(* newargs)

     

文件“”,第31行,在lightLst中

     

文件“”,第17行,在updateList中

     

文件“C:\ Program   文件\欧特克\ Maya2015 \ Python的\ LIB \站点包\ pymel \内部\ factories.py”   第806行,在newUiFunc中        返回beforeUiFunc(* args,** kwargs)

     

文件“C:\ Program   文件\欧特克\ Maya2015 \ Python的\ LIB \站点包\ pymel \内部\ factories.py”   第947行,在newFuncWithReturnFunc中        res = beforeReturnFunc(* args,** kwargs)

     

文件“C:\ Program   文件\欧特克\ Maya2015 \ Python的\ LIB \站点包\ pymel \内部\ pmcmds.py”   第134行,在wrappedCmd中        res = new_cmd(* new_args,** new_kwargs)

     

RuntimeError:未指定对象名称。 #

我有点坚持,我找不到适合我的答案。这是代码:

import maya.cmds as cmds
import maya.mel as mel
import pymel.core as pm

class createWindowClass(object): 
    def __init__(self, *args):
        pass
    def show(self):
        self.createWindow()

    def turnOn(totalLgt, *args):
        print "Enter turnOn"

    def turnSolo(totalLgt, *args):
        print "Enter turnSolo"

    def updateList(name, totalLgt, *args):
        print "update %s" % name

        self.button = pm.button(label="ON", e=True, command = lambda *args: turnOn(totalLgt))
        self.button = pm.button(label="SOLO", e=True, command = lambda *args: turnSolo(totalLgt))

    def lightLst(*args):
        totalLgt = 0 

        #list all lights in scene
        lis = pm.ls(type='light')
        print lis
        for lgt in lis: 
           totalLgt += 1
           nameLgt = lgt.longName()
           name = nameLgt.split("|")[1]
           print name
           updateList(name, totalLgt)

    #CREATE WINDOW 
    def createWindow(self):
        windowID = 'Light Control'
        if pm.window(windowID, exists = True):
            pm.deleteUI(windowID)

        pm.window(windowID, title = "Modify Lights", width = 100, sizeable = True)
        pm.rowColumnLayout(numberOfColumns=1, columnWidth=[(10,120)], columnOffset=[10,"right",5])
        pm.text(label=" ********  Light list ******** \n")
        pm.button(label="CREATE", command = lightLst)
        pm.text(label= " \n ***************************** \n ")
        window_obj = pm.window(windowID)
        window_obj.show()

cls = createWindowClass()
cls.show()

如果有人可以为它带来一些启示,我真的很感激它!

1 个答案:

答案 0 :(得分:1)

你必须写pm.button(label="CREATE", command = self.lightLst),你必须将self作为你班级中方法的第一个参数传递。