사용자가 모든 데이터 유형 (str, float, int, boolean ...)을 입력 할 수 있는지 확인하는 방법은 무엇입니까?

LeaBS

그래서 이것은 포럼에 대한 나의 첫 번째 질문이며 내가 올바르게하고 있기를 바랍니다. 일반적인 질문 : 사용자가 변경하려는 컨텍스트 또는 매개 변수에 따라 다른 데이터 유형의 값을 입력 할 수 있도록하는 스크립트를 작성할 때 Python이 오류를 반환하지 않도록하려면 어떻게해야합니까? 좀 더 구체적 : 저는 파이썬을 처음 접했고 The Foundry의 Nuke 사용자가 한 번에 같은 클래스의 여러 노드에서 값을 변경할 수 있도록하는 스크립트를 작성하고 싶습니다. 변경할 매개 변수가 체크 박스 ( 'bool')이고 RGBA 입력 ( '4 floats')인지 여부에 따라 입력은 다른 유형이어야합니다. 포럼을 검색 한 결과 type () 함수 유형을 확인 하고 isinstance ()를 사용하여 if 문에서 비교할 수 있음을 발견했습니다.함수. 나는 그것을 사용할 수 있다고 생각하지만, 예를 들어 Gradenode의 곱하기 노브의 유형은 'AColor_Knob'유형을 반환합니다. 나는 플로트와 같은 것을 기대했습니다. 그리고 isinstance ()에서 비교해도 내가 비교하는 데이터 유형에 관계없이 일치하지 않습니다.

지금까지 본문 :

nukescripts.clear_selection_recursive()

userInput = nuke.getInput('Which type of nodes would you like to select? (!!!first char has to be capitalized!!!)',
                          'Shuffle')

matchingNodes = []

for each in nuke.allNodes():
    if each.Class() == userInput:
        matchingNodes.append(each)
    else:
        pass

for i in matchingNodes:
    i.setSelected(True)

nuke.message(str(len(
    matchingNodes)) + ' matching Nodes have been found and are now selected! (if 0 there either is no node of this type or misspelling caused an error!)')

userInput_2 = nuke.getInput('Which parameter of these nodes would you like to change? \n' +
                            '(!!!correct spelling can be found out by hovering over parameter in Properties Pane!!!)',
                            'postage_stamp')
userInput_3 = nuke.getInput('To what do you want to change the specified parameter? \n' +
                            '(allowed input depends on parameter type (e.g. string, int, boolean(True/False)))', 'True')

for item in matchingNodes:
    item.knob(userInput_2).setValue(userInput_3)

지금까지 데이터 유형을 확인한 방법 :

selected = nuke.selectedNode()
knobsel = selected.knob('multiply')
print(type(knobsel))
#if type(knobsel) == bool:
if isinstance(knobsel, (str,bool,int,float,list)):
    print('match')
else:
    print('no match')
M. 마지막

nuke.tcl ()을 사용하여 TCL 명령을 호출 할 수 있습니다. TCL에서는 모든 것이 문자열이므로 유형은 관련이 없습니다 (일부 명령에서).

p = nuke.Panel('Property Changer')
p.addSingleLineInput('class', '')
p.addSingleLineInput('knob', '')
p.addSingleLineInput('value', '')
p.show()

node_class = p.value('class')
knob_name = p.value('knob')
knob_value = p.value('value')

for node in nuke.allNodes(node_class):
    tcl_exp = 'knob root.{0}.{1} "{2}"'.format(node.fullName(),knob_name,knob_value)
    print tcl_exp
    nuke.tcl(tcl_exp)

그것은 당신의 질문에 답할 것입니다. 하려는 작업에 접근하는 방법에는 여러 가지가 있습니다. 모든 것을 Python으로 유지하려면 노브 값에 대한 유형 검사를 수행 할 수 있습니다. 예를 들면 :

b = nuke.nodes.Blur()
print type(b.knob('size').value()).__name__

이것은 Blur 노드를 만들고 유형의 문자열 값을 인쇄합니다. 이 경로를 권장하지는 않지만이를 사용하여 값을 변환 할 수 있습니다.

example = '1.5'
print type(example)
exec('new = {}(example)'.format('float'))
print type(new) 

아래로 이동하는 다른 경로는 노브 유형 및 예상 값에 대한 사용자 지정 조회 테이블을 직접 만드는 것입니다.

편집하다:

TCL Nuke 명령 : http://www.nukepedia.com/reference/Tcl/group__tcl__builtin.html#gaa15297a217f60952810c34b494bdf83d

Nuke Node Graph에서 X를 누르거나 File> Comp Script Command로 이동하면 TCL을 선택하고 다음을 실행할 수 있습니다.

knob root.node_name.knob_name knob_value

예:

knob root.Grade1.white "0 3.5 2.1 1"

이름이 지정된 노브의 값을 설정합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관