0

現在、Maya 内でカメラ情報を取得して GUI に表示する簡単なスクリプトを作成しています。スクリプトは、選択したカメラのカメラ データを問題なく出力しますが、ボタンを押したときにテキスト フィールドをデータで更新できないようです。単純なコールバックだと確信していますが、その方法がわかりません。

コードは次のとおりです。

from pymel.core import * 
import pymel.core as pm

camFl = 0
camAv = 0

win = window(title="Camera Information", w=300, h=100)
layout = columnLayout()
txtFl = text("Field Of View:"),textField(ed=0,tx=camFl)
pm.separator( height=10, style='double' )
txtAv = text("F-Stop:"),textField(ed=0,tx=camAv)
pm.separator( height=10, style='double' )
btn = button(label="Fetch Data", parent=layout)

def fetchAttr(*args):

    camSel = ls(sl=True)
    camAttr = camSel[0]
    cam = general.PyNode(camAttr)
    camFl = cam.fl.get()
    camAv = cam.fs.get()
    print "Camera Focal Length: " + str(camFl) 
    print "Camera F-Stop: " + str(camAv)

btn.setCommand(fetchAttr)
win.show()

ありがとう!

4

1 に答える 1

0

いくつかのこと:

1)これらの行にカンマがあるため、 textField とテキスト オブジェクトの両方txtAVにandtextFlを割り当てています。したがって、プロパティを設定することはできません.pymelハンドルだけでなく、1つの変数に2つのオブジェクトがあります。

2) ユーザーがシェイプを選択することに依存しているため、アウトライナーでカメラ ノードを選択すると、コードは南に進みます。

そうでなければ、基礎は健全です。ここに作業バージョンがあります:

from pymel.core import * 
import pymel.core as pm


win = window(title="Camera Information", w=300, h=100)
layout = columnLayout()
text("Field of View")
txtFl = textField()
pm.separator( height=10, style='double' )
text("F-Stop")
txtAv = textField()
pm.separator( height=10, style='double' )
btn = button(label="Fetch Data", parent=layout)


def fetchAttr(*args):

    camSel = listRelatives(ls(sl=True), ad=True)
    camSel = ls(camSel, type='camera')
    camAttr = camSel[0]
    cam = general.PyNode(camAttr)
    txtAv.setText(cam.fs.get())
    txtFl.setText(cam.fl.get())

btn.setCommand(fetchAttr)


win.show()
于 2015-10-08T16:28:42.600 に答える