Q100354: How to activate a Nuke menu command using Python

Follow

SUMMARY

This article covers how to use Python to activate commands from a Nuke menu system.

 

MORE INFORMATION

Nuke’s graphical user interface (GUI) is very customizable, and as part of that you can add, move or activate various items in the menu system, allowing users to set up custom pipelines with full integration into Nuke.

Nuke’s menu system is comprised of two main classes, Menus and MenuItems, definitions for which can be seen below:

  • Menu class: A container for other Menus or MenuItems
  • MenuItem class: A container for a QAction which performs an action in Nuke

The Menu and MenuItem classes are used to make the menu structures inside Nuke. You can also use them to make your own menu structures, allowing for custom menus. More information about the two classes can be found here: 

A QAction is a QT/PySide class and is an abstract action which can be used to perform commands. More information about QActions can be found in the QT documentation here: 
http://doc.qt.io/qt-5/qaction.html

When you execute a command from a Nuke menu in the GUI, you are actually telling a MenuItem container to invoke its associated QAction. For example, when you select the Clone QAction in the Edit menu, a node is cloned, as that is the command assigned to that QAction. 

METHOD

In order to activate a command in Nuke's menu structure via Python, you need to "find" the particular MenuItem container and invoke its associated QAction. This can be done using the code below:  

mainMenu = nuke.menu("Nuke")
mainMenu.findItem("Edit/Clone").invoke()

 

The first line of code, mainMenu = nuke.menu("Nuke"), returns the Menu class of the main Nuke menu toolbar:

NOTE: If you're looking to access the nodes toolbar instead, this can be done with the same command by replacing “Nuke” with “Nodes”:

 

The second line, mainMenu.findItem("Edit/Clone").invoke(), uses the findItem() function to find the "Clone" MenuItem container inside the "Edit" Menu. Then, the QAction of that MenuItem is activated via the invoke() function. The result in this case would be cloning the selected nodes.

NOTE: To create the path to find a particular QAction in a menu system, you need to use "/" as separator every time you enter a sub menu. For example: Edit/Clone, Viewer/View/Next, etc.


Current valid menus to use with nuke.menu() are:

'Nuke': the application menu

'Pane': the UI Panes & Panels menu

'Nodes': the Nodes toolbar (and Nodegraph right mouse menu)

'Properties': the Properties panel right mouse menu

'Animation': the knob Animation menu and Curve Editor right mouse menu

'Viewer': the Viewer right mouse menu

'Node Graph': the Node Graph right mouse menu

'Axis': functions which appear in menus on all Axis_Knobs.

    We're sorry to hear that

    Please tell us why