Tag: Script Editor
Nuke save / restore script editor input
by admin on Jan.24, 2015, under Nuke, Python
This is something that has bugged me since i started working with nuke, if you doing a little interactive scripting, if you forgot to copy/paste it to your script editor, then it was gone on load / nuke exit.
Her is a snap shot of the code i have in my site menu.py , that is in the NUKE_PATH:
# find the script editor: import PySide import PySide.QtGui as QtGui import os # get the current qtgui instance nuke_app = QtGui.QApplication.instance() # global vars temp_dir = os.environ['NUKE_TEMP_DIR'] saved_text = '%s/nuke_script_editor.txt' % temp_dir def get_script_editor(): ''' returns the QTextDocument which is the input area for the script editor ''' # get all the widgets all_widgets = nuke_app.allWidgets() script_editor = None for w in all_widgets: name = w.objectName() # lots of the wigets are not named, ignore them if not len(name) == 0: if name == 'Script Editor.1': script_editor = w # get plain text: #script_editor.children()[0].toPlainText() #get the QTextDocument correctly from the txt_doc = None for child in script_editor.children(): if isinstance(child,PySide.QtGui.QTextDocument): txt_doc = child return txt_doc def save_script_editor(): ''' saves the data from the script edotor to disk ''' script_editor = get_script_editor() text = script_editor.toPlainText() fid = open(saved_text,'w') fid.write(text) fid.close() print "script editor saved to: ",saved_text def restore_script_editor(): ''' restore the saved script editor data ''' script_editor = get_script_editor() text = open(saved_text,).read() script_editor.setPlainText(text) def checkRootCallbacksSet(): ''' setup all the callbacks ''' if nuke.Root().knob('onScriptClose').getValue() == '': nuke.addOnScriptClose(save_script_editor, nodeClass='Root') if nuke.Root().knob('onScriptLoad').getValue() == '': nuke.addOnScriptLoad(restore_script_editor, nodeClass='Root') restore_script_editor() nuke.addOnCreate(checkRootCallbacksSet, nodeClass='Root')
So a quick explanation for what im doing.
Using the QApplication.instance(), im getting the Nuke app, from here i have a convenience method “get_script_editor” that i use to get the QTextDocument that nuke is using to store the script editor data.
I then have 2 methods for saving the data to disk and reading it back from disk.
Then to tie it all together, i use nukes call backs to set it so, when nuke loads for the first time or loads a nuke script, it loads the data from disk. I then use the script close function, this works for either a save / clear or closing the ui, it will write out the script editor data to disk.
I have tested this with nuke 7.0v9, but it should work with all versions of nuke.