【问题标题】:Python Text Field in MayaMaya 中的 Python 文本字段
【发布时间】:2017-08-03 06:30:31
【问题描述】:

我想知道如何才能将文本字段中的文本传递到 Maya 中相机的 Focus Distance 属性中?

到目前为止,我一直在研究它,我设置的方法是,当在文本字段中按下回车键时,将运行一个命令,从那里找到选定的相机并尝试查询文本字段内的文本.

cmds.textField("focusdistance", parent="Extra", enterCommand=focusdistance)

一旦你按下回车,它就会运行:

def focusdistance(self):
    fd = cmds.ls(sl=True)[0]
    cmds.setAttr('query="focusdistacne.tx"')

我已经启动并运行它,但我也不断收到来自 Maya 的错误:

# Error: RuntimeError: file <maya console> line 85: setAttr: Invalid object name: query="focusdistacne.tx" # 

所以为了简化。我有一个可编辑的文本字段,可以在输入时运行命令。当按下回车键时,我希望将在文本字段中输入的数字传递到 Maya 中选定相机的焦距属性中。

谢谢!

【问题讨论】:

  • 你有什么进展吗?
  • @SwiftsNamesake 是的,我修复了它并让它全部启动并运行。最后我做到了。 focusdistancefield = cmds.floatField("focusdistance", enterCommand=focusdistance) def focusdistance(self): fd = cmds.ls(sl=True)[0] value = cmds.floatField(focusdistancefield, query = True, value = True) cmds.setAttr(fd + ".focusDistance", value) 我不能让这个看起来很漂亮,哎呀。

标签: python text textfield maya


【解决方案1】:

这种格式不起作用:

cmds.setAttr('query="focusdistacne.tx"')

默认的 Maya 相机没有focusdistance 属性——centerOfInterest 是相机绕行的目标,focalLength 会影响 FOV。我将在下面保留focusdistance 假设您正在使用某种特殊的相机,但您应该检查maya docs 以确保您的设置正确

您需要保存您创建的文本字段的名称,以便focusdistance 函数可以向它提问。您还需要修复 setAttr。我认为您正在寻找这样的东西:

# in the part of the class where you create the textfield:

self.focal_dist_field = cmds.textField("focusdistance", parent="Extra", enterCommand=self.focusdistance)

并且,当您获得 textField 时,您可能必须将其内容转换为数字才能将它们设置为数字属性(除非您的 focusDistance 属性是字符串?)

def focusdistance(self):
   target = cmds.ls(sl=True)[0]
   # get the text, or a '0' if there's nothing entered
   value = cmds.textField(self. focal_dist_field, q=True, text=True) or "0"

   # convert the text to a number if possible
   # in practice you probably want a FloatField control
   # instead of a TextField so you can skip this
   try:   
       numeric_value = float(value)
   except ValueError: 
       numeric_value = 0
   cmds.setAttr(target + ".focusdistance", numeric_value)

【讨论】:

  • 您好,我感觉格式行不通,这就是我来这里的原因。我去三次检查了 Maya 文档/Python 命令/Maya 本身,有一个可以操作的 focusDistance 属性,但参数类型也是线性的。我四处走动,把你提到的弄乱了,结果一切都很好;谢谢你!我确实将textField 换成了floatField,这有助于缩短一切。我之前不使用的唯一原因是因为我不知道它们的存在。最后我的代码看起来像:
【解决方案2】:

focusdistance 函数中有错字:query='focusdistacne'

【讨论】:

  • 感谢您指出这一点。我通过并修复了它,但我仍然遇到错误。你认为我还能做些什么来解决它? # Error: RuntimeError: file &lt;maya console&gt; line 85: setAttr: Invalid object name: query="focusdistance.tx" #
  • 你看过setAttr的文档吗?
  • 顺便说一下,当您在一个变量中包含多个单词时,我们通常通过大写除第一个以外的所有单词来区分它们:focusDistance
  • @SwiftsNamesake 在 Python 中不正确。 Pep8 要求单词全部小写并用下划线分隔。
  • @JoshKopen 在 Python 中确实人们经常使用 camelCase,无论 Pep8 说什么。我当然知道,从我找到的几个例子来看,Maya 也是如此。但让我们看看 OP 怎么说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多