My first guess is that the root().name() knob is not yet populated while the script is called onScriptLoad. I seem to remember that was the case. Add a nuke.tprint(nuke.root().name()) in your onScriptLoad python script to verify....

On 07/15/2011 12:34 PM, Optical wrote:
Hi all,

i try to find a way to read a txt file based on the script name os.path.dirname(nuke.Root().name()) on ScriptLoad.

I have a panel with a String_Knob. If the knob is changed a txt file is written to the script path. With a Load Button i can load the txt file back into the string but i want nuke to do this on start without a button.

Its working with a txt file in the plugin path. But i think its because of how nuke starts - init and menu.py first?!

For me, who is new to python it must be something like this, but it doesnt work:


class TextFile(nukescripts.PythonPanel):
def __init__(self):
nukescripts.PythonPanel.__init__(self, 'Textfile', 'com.xy.Textfile')
self.Load()

# String
self.Project = nuke.File_Knob('Name', 'Name')
self.addKnob( self.Project )

# KNOBS DEFINITION
def knobChanged( self, knob ):
if knob == self.Name:
self.WriteFile()

# WRITE STRINGS TO TXT FILE IN THE NUKE_SCRIPT DIR
def WriteFile( self ):
if (os.path.dirname(nuke.Root().name()) != ''):
# NUKE_SCRIPT PATH AND TXT NAME DEFINITION
scPath = os.path.dirname(nuke.Root().name())
bin = scPath + '/' + 'TxtBin'
file = "Textfile.txt"
# MAKE DIRECTORY
path = bin + os.sep + file
if not os.path.exists(bin):
os.mkdir(bin)
# WRITE STRINGS
shotinfo = open(path, "w")
shotinfo.write('Name:' + self.Name.value() + '\n')

# READ TXT FILE BACK TO STRINGS
def Load( self ):
if (nuke.Root().name()) != 'Root' :
# NUKE_SCRIPT PATH AND TXT NAME DEFINITION
scPath = os.path.dirname(nuke.Root().name())
bin = scPath + '/' + 'TxtBin'
file = "Textfile.txt"
infotext = bin + '/' + file
openfile = open(infotext, 'r')
array = []
for line in openfile:
x=line
if (x.find('\n') > -1):
line = str(line).replace('\n', '',5)
array.append( line )
# READ LINE VALUES
self.Name.setValue(str(array[0]).replace('Name:', '',1))
self.WriteFile()


So why doesnt it work withself.Load() at the beginning? It seems that Nuke wants to set the Values for the string before the Panel is loaded. I dont have a solution. So if you know what i did wrong please let me know.


_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python


--
Sebastian Elsner - Pipeline TD - r i s e | fx

t: +49 30 201 803 00 [email protected]
c: +49 175 336 5739 7548 www.risefx.com

r i s e | fx GmbH
Schlesische Strasse 28, Aufgang B 10997 Berlin
Richard-Byrd-Strasse 12, 50829 Cologne
Geschaeftsfuehrer: Sven Pannicke, Robert Pinnow
Handelsregister Berlin HRB 106667 B

_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to