【问题标题】:how to work with dictionary in maya python如何在 Maya python 中使用字典
【发布时间】:2018-04-26 12:21:50
【问题描述】:

我尝试在 maya python 上学习字典。

我想记录一些物体的旋转,以后会用到 它可以记录值,但是当我调用字典时它总是给我“无”的答案

import maya.cmds as cmds

myDic = {}

def test():
    mods = cmds.getModifiers()
    SELlis = cmds.ls(sl = 1)

    a = 0
    b = 1

    if mods == 4:
        for obj in SELlis:
            myDic[obj] = cmds.getAttr(obj+'.rotate')

    else :
        for obj in SELlis:
            if obj in myDic:
                print myDic.get(obj)

            else :
                print 'none'
   test()

谢谢

【问题讨论】:

  • 有什么问题/疑问?
  • 对不起,我忘了解释这个问题,它现在解决了谢谢
  • 我想最后一个'test()'应该没有缩进?因为这会导致无限递归。
  • 你是如何执行脚本的?
  • 您好 Haggi,感谢您的回复,我将脚本拖到 Mayas 按钮工具中,所以它会以按钮的形式出现。我使用 ctrl + 鼠标左键单击该按钮以记录对象的值,然后单击鼠标左键调用该值

标签: python maya


【解决方案1】:

对不起,我一开始就创建了“myDic = {}”,所以每次按下按钮时,它都会将“myDic”重置为无

import maya.cmds as cmds
def test():
    global myDic
    mods = cmds.getModifiers()
    SELlis = cmds.ls(sl = 1)

    if mods == 4:
        myDic = {}
        for obj in SELlis:
            myDic[obj] = cmds.getAttr(obj+'.rotate')

    else :
        for obj in SELlis:
            if obj in myDic:
                print myDic.get(obj)

            else :
                print 'none'
test()

【讨论】:

  • 现在可以使用了吗?我想不是因为您现在在函数本地范围内创建 myDic,如果函数完成,它将被删除。
  • 嗨哈吉,不,它还没有被删除,因为它是一个按钮,myDic 将在内存中,直到函数完成(当我关闭程序时),所以我可以一次又一次地调用它。 ..顺便说一句,谢谢哈吉
  • 这真的很有趣。对我来说,这根本不起作用,我收到 UnboundLocalError: local variable 'myDic' referenced before assignment 错误。原因很简单:您的 myDic 是在if mods == 4: 条件的范围内创建的,一旦到达else: 就会被丢弃。所以如果它对你有用,那么你身边就会发生一些非常奇怪的事情;)
  • 嗨哈吉,哦,是的,对不起,我不小心删除了“全局 myDic”...希望它现在可以工作了 :)
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2018-02-07
  • 2023-03-08
  • 2018-03-08
相关资源
最近更新 更多