首页 > 解决方案 > Maya中的Python问题说我的函数没有定义

问题描述

所以说实话,我在这里的出拳有点超出我的体重,我不完全理解我在做什么,但随着它的进行,我一直在学习并使事情发挥作用,所以我正处于学习关于超前思考的宝贵经验的阶段。所以我有两个目录,一个有 47 个图像,一个有 47 个目录,它们具有与图像对应的相同名称。例如,如果有一个名为“img_05.jpg”的图像,那么还有一个名为“img_05”的目录。我的想法是,我创建了一个循环遍历图像目录的窗口,并为每个图像创建一个 image_icon 按钮,如下面的代码所示:

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

imagePath = \
    'C:/IMAGES/_ICONS_/'
if cmds.window('window1', q=1, ex=1):
    cmds.deleteUI('window1')
cmds.window('window1', t='SCAN IMPORTER', mb=1)
cmds.gridLayout(cw=150, w=500, nc=8, h=800, ch=150)

getImgList = os.listdir(imagePath)

# print getImgList

i = 0
for i in getImgList:
    ImgNamStr = i
    ImgNamNum1 = ImgNamStr.split('.')

    # print ImgNamNum1[0]

    scanBtn = cmds.iconTextButton(i=imagePath + i, c='scanImp("' + i
                                  + '")', dcc='scan_light("' + i
                                  + '")')

cmds.showWindow('window1')

我有这样定义的其他功能,

def scanImp(*args):
    print args[0] + ' ' + ' was pushed.'
    ImgNmNoExt = args[0].split('.')

  # print ImgNmNoExt[0]

    ScanBtnPath = imagePath + ImgNmNoExt[0]
    print 'the directory is:' + ' ' + ScanBtnPath

当我通过 Maya 脚本编辑器运行它时,它按预期工作。但是,当我通过架子按钮获取它时(脚本目录在启动时添加到路径中)我收到一条错误消息,指出未定义 scanImp。我在这里错过了一些非常明显的东西吗?

*已编辑以修复函数名称

标签: pythonmaya

解决方案


似乎您的错误消息和代码不同,因为没有调用函数scanBusImp()。除了这个错误之外,主要问题在于 UI 在 Maya 中的工作方式。你可以试试:

    scanBtn = cmds.iconTextButton(i=imagePath + i, c='import scanimporter; scanimporter.scanBusImp("' + i
                              + '")', dcc='scan_light("' + i
                              + '")')

让它发挥作用。scanimporter是我给脚本文件起的名字。出于这个原因,我建议使用类来处理 UI 和回调,使其更易于使用。如果你使用一个类,你可以像这样调用方法:

def scanBusImp(self, *args):
    importSomething

def createUI(self):
    self.scanBtn = cmds.iconTextButton(i=imgpath..., c=self.scanBusImp)

推荐阅读