【问题标题】:Create dynamic buttons in window在窗口中创建动态按钮
【发布时间】:2015-11-30 13:10:16
【问题描述】:

我正在尝试根据场景中存在的灯光数量在窗口中创建按钮。 当我按下创建按钮时,我收到此错误(#RuntimeError: No object name specified.#):

Traceback(最近一次调用最后一次):文件“C:\Program 文件\Autodesk\Maya2015\Python\lib\site-packages\pymel\internal\factories.py", 第 779 行,在回调中 res = origCallback( *newargs )

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

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

文件 "C:\Program 文件\Autodesk\Maya2015\Python\lib\site-packages\pymel\internal\factories.py", 第 806 行,在 newUiFunc 中 return beforeUiFunc(*args, **kwargs)

文件 "C:\Program 文件\Autodesk\Maya2015\Python\lib\site-packages\pymel\internal\factories.py", 第 947 行,在 newFuncWithReturnFunc res = beforeReturnFunc(*args, **kwargs)

文件 "C:\Program 文件\Autodesk\Maya2015\Python\lib\site-packages\pymel\internal\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()

如果有人能给它一些启示,我真的很感激!

【问题讨论】:

    标签: python button dynamic maya pymel


    【解决方案1】:

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

    【讨论】:

    • 谢谢!但如果我做对了就不行了,我将 self 添加到我的方法中,但是现在当它进入 updateList 时,我收到此错误:# RuntimeError: Controls must have a layout。在窗口中找不到布局:#
    • lightLst方法中,还得写self.updateList(name, totalLgt)
    • 为什么你首先用布局按钮和文本创建pm.window(),但最后你创建另一个窗口(window_obj)并显示?
    • 很高兴有帮助!既然它解决了问题,你应该接受答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2013-02-08
    • 2019-07-29
    相关资源
    最近更新 更多