snip–><–snip

Nuke save / restore script editor input

by 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.

:, , ,
No comments for this entry yet...

Leave a Reply


seven − 4 =

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!