/NodeGraphQt

Node graph framework that can be re-implemented into applications that supports PySide2

Primary LanguagePythonMIT LicenseMIT

NodeGraphQt

License: MIT python 3.7+ PEP8 stability-wip

(Note: this project is a work in progress and not production ready.)


NodeGraphQt is a node graph framework that can be implemented and re purposed into applications that supports PySide2.

Documentation

NodeGraphQt Documentation

Navigation

action controls
Zoom in/out Alt + MMB Drag or Mouse Scroll Up/Down
Pan Alt + LMB Drag or MMB Drag
Node search Tab

Slice Connections

action controls
Slice Connections Shift + Alt + LMB Drag

Properties Bin

Vertical Layout

Example

import sys

from NodeGraphQt import QtWidgets
from NodeGraphQt import NodeGraph, BaseNode, BackdropNode, setup_context_menu

# create a example node object with a input/output port.
class MyNode(BaseNode):
    """example test node."""

    # unique node identifier domain. ("com.chantasticvfx.MyNode")
    __identifier__ = 'com.chantasticvfx'

    # initial default node name.
    NODE_NAME = 'My Node'

    def __init__(self):
        super(MyNode, self).__init__()
        self.add_input('foo', color=(180, 80, 0))
        self.add_output('bar')


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    # create the node graph controller.
    graph = NodeGraph()
    
    # set up default menu and commands.
    setup_context_menu(graph)
   
    # register backdrop node. (included in the NodeGraphQt module)
    graph.register_node(BackdropNode)
   
    # register example node into the node graph.
    graph.register_node(MyNode)
   
    # create nodes.
    backdrop = graph.create_node('nodeGraphQt.nodes.Backdrop', name='Backdrop')
    node_a = graph.create_node('com.chantasticvfx.MyNode', name='Node A')
    node_b = graph.create_node('com.chantasticvfx.MyNode', name='Node B', color='#5b162f')
    
    # connect node a input to node b output.
    node_a.set_input(0, node_b.output(0))    

    # get the widget and show.
    graph_widget = graph.widget
    graph_widget.show()

    app.exec_()