(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.
action | controls |
---|---|
Zoom in/out | Alt + MMB Drag or Mouse Scroll Up/Down |
Pan | Alt + LMB Drag or MMB Drag |
Node search | Tab |
action | controls |
---|---|
Slice Connections | Shift + Alt + LMB Drag |
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_()