【NUKE教程】Nuke Python 自定义UI

10 九月, 2016
12
0

nukepythonui
快捷键,菜单,菜单项 的做法。这类代码一般在menu.py里面。至于如何安装请参看installing Plug-ins.

nuke中现有的菜单:

  • Nuke – 程序菜单在界面的最上面:
    Nuke Python 自定义UI
  • Window – pane 在pane菜单下的内容菜单。
    Nuke Python 自定义UI
  • nodes 工具栏(在节点图上右键单击)
    Nuke Python 自定义UI
  • 属性 右击属性panel的菜单
    Nuke Python 自定义UI
  • 动画- 所有属性中动画按钮上的弹出菜单,右击Curve Editor的菜单
    Nuke Python 自定义UI
  • viewer 右击viewer的菜单
    Nuke Python 自定义UI
  • Node Graph 右击Node graph的菜单
    Nuke Python 自定义UI
  • Axis 所有Axis_knob的菜单
    Nuke Python 自定义UI

创建自定义菜单

m = nuke.menu('Viewer')
myMenu = m.addMenu('MyStuff')

给菜单添加icon

m = nuke.menu('Viewer')
myMenu = m.addMenu('MyStuff', icon = 'ohu_icon.png' )

Nuke Python 自定义UI

创建自定义工具栏

myToolbar = nuke.toolbar('My nodes')

Nuke Python 自定义UI

给toolbar添加item和给menu添加一样
myToolbar.addCommand(‘My Gizmo’, lambda: nuke.createNode(‘NoOp’ ) )
如果没给item指定toolbar,那将成为一个按钮:

Nuke Python 自定义UI

否则,item作为菜单项( 像默认工具栏那样):

myToolbar.addCommand( 'My other Tools/tool A', lambda: nuke.createNode( 'NoOp') ) myToolbar.addCommand(' My Other tools/tool B', lambda: nuke.createNode('NoOp') )

Nuke Python 自定义UI

给menu添加icon,那就在创建前明确指定。
myMenu = myToolbar.addMenu(‘My Gizmo’, icon= ‘ohu_icon.png’ )
myMenu.addCommand( ‘tool A’, lambda: nuke.createNode(‘NoOp’))
myMenu.addCommand(‘ tool B’, lambda: nuke.createNode(‘NoOp’))

Nuke Python 自定义UI

创建自定义菜单项

给菜单添加自定义入口,请用menu.addCommand():
nuke.menu(‘Nuke’).addCommand(‘MyMenu/my tool 1’, lambda:nuke.message(‘yay, it works’ ))

注意:上面的例子中,我们创建了叫MyMenu的菜单

Nuke Python 自定义UI

利用lambda表达式创建的匿名函数要在菜单项调用时才执行,你可以将需要的命令打包进一个字符串:
nuke.menu(‘Nuke’).addCommand(‘MyMenu/my tool 2’, “nuke.message(‘yay, it works too’)” )

Nuke Python 自定义UI

也可以给菜单项赋予位于plug-in路径下的icon
nuke.menu(‘Nuke’).addCommand(‘myMenu/my tool 2’, “nuke.message(‘yay, it works too’)”, icon = ‘ohu_icon.png’)

Nuke Python 自定义UI

要设置菜单项的位置请使用index参数:
nuke.menu(‘Nuke’).addCommand(‘MyMenu/my tool 1.5’, “nuke.message(‘yay, it works too’)”, index = 1 )

Nuke Python 自定义UI

通过名字找到菜单,并在前面添加一个分割线:

m = nuke.menu('Nuke').findItem('MyMenu')
m.addSeparator()
nuke.menu('Nuke').addCommand('MyMenu/my tool 3', "nuke.message('yay, it works too')")

Nuke Python 自定义UI

找到已存在的menu 项,并运行其函数:
m = nuke.menu(‘Nuke’).findItem(‘Edit/Node/Filename/Show’)
m.invoke()

停用菜单项:
m = nuke.menu(‘Nuke’).findItem(‘Redner/Proxy Mode’)
m.setEnable( False )

Nuke Python 自定义UI

注意,菜单虽然禁止了,但快捷键依然可用。

绑定快捷键

给已存在菜单绑定快捷键,你可以有效地取代整个菜单项
给Axis2节点绑定快捷键。这个节点在Nodes菜单里(那就是,toolbar),在3D子菜单,其子项叫Axis。
nuke.menu(‘Nodes’).addCommand(‘3D/Axis’, lambda:nuke.createNode(‘Axis2’ ), ‘a’ )
现在键盘上的a就能创建Axis节点。

Nuke Python 自定义UI

当绑定快捷键时也可以修改. 用ctrl( mac上的 cmd) 作为修改:

  • ctrl + 后跟键
  • ~ 后跟键
    例如:

    nuke.menu('Nodes').addCommand('3D/Axis', "nuke.createNode('Axis2')", "ctrl+a')
    nuke.menu('Nodes').addCommand('3D/Axis', "nuke.createNode('Axis2')", "`a')

用alt作为修改:

  • alt+键
  • # + 键
    nuke.menu( 'Nodes' ).addCommand( '3D/Axis', "nuke.createNode( 'Axis2' )", 'alt+a')
    nuke.menu( 'Nodes' ).addCommand( '3D/Axis', "nuke.createNode( 'Axis2' )", '#a')

用shift作为修改:

  • shift + 键
  • + 后跟键
    nuke.menu( 'Nodes' ).addCommand( '3D/Axis', "nuke.createNode( 'Axis2' )", 'shift+a')
    nuke.menu( 'Nodes' ).addCommand( '3D/Axis', "nuke.createNode( 'Axis2' )", '+a')
    

定义默认knob

修改默认knob值,请使用nuke.knobDefault()

nuke.knobDefalut('Blur.size', '77' )

上面的代码将所有blur节点的size控制默认值设置为77
当跳过节点类,新的默认值会应用到所有给定的控制上

nuke.knobDefault( 'channels', 'rgba')

上面的代码在节点创建时设置所有的channel为rgba。