2017-11-21 5 views
0

간단한 스크립트로 문제가 있습니다. 아직 여기 있습니다! 사실, ACTUAL 스크립트에는 문제가 없지만 Maya UI에는 문제가 없습니다.PYMEL Maya UI 미친 듯함

여러 창이 생성되는 것을 피할 수없고 deleteUI ("nemeOfUI")를 사용하여 삭제할 수도없는 것 같습니다. 나를 미치게하는 thats. 나는 줄을 찾아 보았고, 나는 그 일을 제대로하고있는 것 같아서 대답을 찾을 수 없다.

전체 코드입니다. 라인 16 17 18 15 110

주의, 208

나는 코드 밤은 '깨끗한하지만 1.2 versin을 알고있다. 일단 그것이 작동하면 나는 청소를 할 것입니다! 고맙습니다!

import pymel.core as pm 
from functools import partial 
import os.path 

try: 
    pm.deleteUI(changeTexWindow) 
except: 
    print'' 

global sizeChoice 

def drawUi(): 


    if (pm.window("ChangeTextureFiles_v1.2", query = True, exists = True)): 
     pm.deleteUI("ChangeTextureFiles_v1.2") 

    changeTexWindow = pm.window("ChangeTextureFiles_v1.2", 
          sizeable = False, 
          width = 300, 
          height = 175, 
          minimizeButton = False, 
          maximizeButton = False 
          ) 

    uiTabs = pm.tabLayout(width = 300, 
         height = 175, 
         parent = changeTexWindow 
        ) 

    uiColumn1 = pm.columnLayout("Change Texture Files", 
          rowSpacing = 5, 
          parent = changeTexWindow, 
          width = 300 
          ) 

    uiColumn2 = pm.columnLayout("Help", 
          rowSpacing = 5, 
          parent = changeTexWindow, 
          width = 300 
          )       

    uiRowExtra = pm.rowLayout(numberOfColumns = 1, parent = uiColumn1, h = 2) 

    uiRow0 = pm.rowLayout(numberOfColumns = 3, parent = uiColumn1, h = 15) 

    pm.separator(style = "none", height = 10, width = 2, horizontal = False) 

    pm.text("Change texture...") 

    uiRow1 = pm.rowLayout(numberOfColumns = 3, parent = uiColumn1, h = 15) 
    uiRow2 = pm.rowLayout(numberOfColumns = 3, parent = uiColumn1, h = 15) 
    uiRow3 = pm.rowLayout(numberOfColumns = 3, parent = uiColumn1, h = 15) 

    options = pm.radioCollection(parent = uiRow1) 

    opt1 = pm.radioButton(parent = uiRow1, label = "From all objects in the scene", data=1) 
    opt2 = pm.radioButton(parent = uiRow2, label = "From only selected objects", data=2) 
    opt3 = pm.radioButton(parent = uiRow3, label = "From all objects in scene but selected", data=3) 
    options = cmds.radioCollection(options, edit=True, select=opt1) 

    uiRow4 = pm.rowLayout(numberOfColumns = 3, parent = uiColumn1) 

    uiRow5 = pm.rowLayout(numberOfColumns = 2, parent = uiColumn1) 

    pm.text('Type the size of texture you want:', parent = uiRow5, annotation = "Enter values as '1,2 3...'. Check Help tab. ", width = 215) 
    sizeChoice = pm.textField(parent = uiRow5, width = 60, annotation = "Enter values as '1,2 3...'. Check Help tab. ") 

    uiRow6 = pm.rowLayout(numberOfColumns = 3, parent = uiColumn1) 

    allB = pm.button(label = "Apply", width = 115, command = partial(passValue, options, sizeChoice, 0)) 
    selB = pm.button(label = "Apply and close", width = 115, command = partial(passValue, options, sizeChoice, 1)) 
    otherB = pm.button(label = "Cancel", width = 54, command = "closeUi()") 


    helpTxt0 = pm.text("",parent= uiColumn2, height = 2) 
    helpTxt1 = pm.text("Created by Mendel Reis at", parent= uiColumn2, width = 300, height = 12) 
    helpTxt2 = pm.text("FACULDADE MELIES", parent= uiColumn2, width = 300,height = 12) 
    helpTxt3 = pm.text("www.melies.com.br", parent= uiColumn2, width = 300, height = 12) 
    helpTxt01 = pm.text(" ",parent= uiColumn2, height = 5) 
    helpTxt4 = pm.text("HOW TO USE:", parent= uiColumn2, width = 300, height = 12) 
    helpTxt5 = pm.text("Will change files thru naming convention:", parent= uiColumn2, width = 300, height = 12) 
    helpTxt6 = pm.text("file_name.SIZE.extension", parent= uiColumn2, width = 300, height = 12) 
    helpTxt7 = pm.text("Input the SIZE as you wish.", parent= uiColumn2, width = 300, height = 12) 
    helpTxt8 = pm.text("Only use . (DOT) to isolate the SIZE tag.", parent= uiColumn2, width = 300, height = 12) 

    pm.showWindow(changeTexWindow) 


def passValue(options, sizeChoice, closeAfter, *args): 
radioCol = cmds.radioCollection(options, query=True, sl=True) 
selOption = cmds.radioButton(radioCol, query=True, data=True) 
newSize = pm.textField(sizeChoice, query = True, tx = True) 
print selOption 
print newSize 


    if (selOption == 1): 
     changeAll(newSize) 
    elif (selOption == 2): 
     changeSelected(newSize) 
    elif (selOption == 3): 
     changeAllBut(newSize) 

    if (closeAfter): 
     try: 
      del sizeChoice 
     except: 
      print'' 
     pm.deleteUI("ChangeTextureFiles_v1.2") 


def changeAll(newSize): 

    allTex = pm.ls(type = "file") 
    notFound = [] #array for texture files without a size change match 

    for tex in allTex: #get info from texture file to be changed 

     path = tex.getAttr("fileTextureName") #get the full path of texture file 
     name = path.split("/")[-1].split('.')[0] #get the name of the file 
     size = path.split("/")[-1].split('.')[-2] #get the user specified, thru naming convention, texture file size info 
     extension = path.split("/")[-1].split('.')[-1] #get the texture file extension 

     if (size != newSize): #check if texture file needs to be changed 
      old = name + "." + size + "." + extension #concatenate the old name 
      new = name + "." + newSize + "." + extension #concatenate the new name 
      newTex = path.replace(old, new, 1) #create string for new fileTextureName 
      if (os.path.isfile(newTex)): #check if requered file exists 
       tex.setAttr("fileTextureName", newTex) #change the textureFileName 
      else: 
       notFound.append(name+'.' + extension) #create a log with failed attempts 


def changeSelected(newSize): 

    objs = pm.selected() 

    for item in objs: 
     a = pm.listRelatives(item)[0] 
     b = pm.listConnections(a, type = "shadingEngine") 
     sgInfo = pm.listConnections(b, type='materialInfo') 
     fileNode = pm.listConnections(sgInfo[0], type='file') 
     textureFile = pm.getAttr(fileNode[0].fileTextureName) 

     name = textureFile.split("/")[-1].split('.')[0] #get the name of the file 
     print "NAME", name 
     size = textureFile.split("/")[-1].split('.')[-2] #get the user specified, thru naming convention, texture file size info 
     print "SIZE", size 
     extension = textureFile.split("/")[-1].split('.')[-1] #get the texture file extension 
     print "EXTENSION", extension 

     if (size != newSize): #check if texture file needs to be changed 
      old = name + "." + size + "." + extension #concatenate the old name 
      new = name + "." + newSize + "." + extension #concatenate the new name 
      newTex = textureFile.replace(old, new, 1) #create string for new fileTextureName 
      if (os.path.isfile(newTex)): #check if requered file exists 
       fileNode[0].setAttr("fileTextureName", newTex) #change the textureFileName 
      else: 
       print "Did not find a texture to replace. Check naming convention: enter size as '1K', '2K'..." 


def changeAllBut(newSize): 

    allObjs = pm.ls(type = "mesh") 

    selection = pm.selected() 
    selObjs = [] 

    for item in selection: 
     a = pm.listRelatives(item)[0] 
     selObjs.append(a) 

    for item in allObjs: 
     if item in selObjs: 
      allObjs.remove(item) 


    for item in allObjs: 
      a = item 
      b = pm.listConnections(a, type = "shadingEngine") 
      sgInfo = pm.listConnections(b, type='materialInfo') 
      fileNode = pm.listConnections(sgInfo[0], type='file') 
      textureFile = pm.getAttr(fileNode[0].fileTextureName) 

      name = textureFile.split("/")[-1].split('.')[0] #get the name of the file 
      print "NAME", name 
      size = textureFile.split("/")[-1].split('.')[-2] #get the user specified, thru naming convention, texture file size info 
      print "SIZE", size 
      extension = textureFile.split("/")[-1].split('.')[-1] #get the texture file extension 
      print "EXTENSION", extension 

      if (size != newSize): #check if texture file needs to be changed 
       old = name + "." + size + "." + extension #concatenate the old name 
       new = name + "." + newSize + "." + extension #concatenate the new name 
       newTex = textureFile.replace(old, new, 1) #create string for new fileTextureName 
       if (os.path.isfile(newTex)): #check if requered file exists 
        fileNode[0].setAttr("fileTextureName", newTex) #change the textureFileName 
       else: 
        print "Did not find a texture to replace. Check naming convention: enter size as '1K', '2K'..."    


def closeUi(): 
    try: 
     del sizeChoice 
    except: 
     print'' 
    pm.deleteUI("ChangeTextureFiles_v1.2") 


drawUi() 

답변

1

이 질문은 일자 조금이지만, 어쩌면 대답은 여전히 ​​도움이된다 "ChangeTextureFiles_v1.2"문제는 창에있다 이름을 객체. Windows 등은 Maya 객체이며 공백이나 점을 허용하지 않습니다. 단순히 폴리 큐브를 만들고 "polycube_v1.2"로 이름을 변경하려고하면 시도 할 수 있습니다.

WINNAME="CTexWin" 
changeTexWindow = pm.window(WINNAME, 
          title = "ChangeTextureFiles_v1.2", 
          sizeable = False, 
          width = 300, 
          height = 175, 
          minimizeButton = False, 
          maximizeButton = False 
          ) 

을 그리고 당신은 존재를 확인하면 바로 WINNAME 사용 : 당신의 창에 대한 대신 제목 플래그를 사용할 수

if pm.window(WINNAME, exists = True): 
    pm.deleteUI(WINNAME) 
+0

이 설명 주셔서 감사를! –