If you realy like to edit current node
and selected nodes
following script can be used. Have fun.
from krita import Krita
from PyQt5.QtCore import Qt, QModelIndex, QItemSelectionModel
from PyQt5.QtWidgets import QTreeView
def get_layer_model():
app = Krita.instance()
kis_layer_box = next((d for d in app.dockers() if d.objectName() == 'KisLayerBox'), None)
view = kis_layer_box.findChild(QTreeView, 'listLayers')
return view.model(), view.selectionModel()
def node_to_index(node, model):
path = list()
while node and (node.index() >= 0):
path.insert(0, node.index())
node = node.parentNode()
index = QModelIndex()
for i in path:
last_row = model.rowCount(index) - 1
index = model.index(last_row - i, 0, index)
return index
def index_to_node(index, document):
if not index.isValid():
raise RuntimeError('Invalid index')
model = index.model()
path = list()
while index.isValid():
last_row = model.rowCount(index.parent()) - 1
path.insert(0, last_row - index.row())
index = index.parent()
node = None
children = document.topLevelNodes()
for i in path:
node = children[i]
children = node.childNodes()
return node
# testing:
# following script will change target_node to be current node,
# also selection is kept and extended to current node.
#
# before running:
# create new document, and add some nodes and node groups
# add one node named target_node
app = Krita.instance()
doc = app.activeDocument()
target_node = doc.nodeByName('target_node')
model, s_model = get_layer_model()
index = node_to_index(target_node, model)
s_model.setCurrentIndex(index, QItemSelectionModel.Select) # or QItemSelectionModel.SelectCurrent
/AkiR