The proxy I originally tested was defined outside the panel, but a class method 
works fine too. Here’s some test code:

import thread

def killNuke():
    nuke.executeInMainThread(nuke.scriptExit, ())

class TestPanel(nukescripts.PythonPanel):
    def __init__(self, name):
        super(TestPanel, self).__init__(name)
        self.closeNukeExternal = nuke.PyScript_Knob('close_ext', 'close via 
external func')
        self.addKnob(self.closeNukeExternal)
        self.closeNukeInternal = nuke.PyScript_Knob('close_int', 'close via 
class method')
        self.closeNukeInternal.setFlag(nuke.STARTLINE)
        self.addKnob(self.closeNukeInternal)
    def knobChanged(self, knob):
        if knob == self.closeNukeExternal:
            self.hide()
            thread.start_new_thread(killNuke, ())
        if knob == self.closeNukeInternal:
            self.hide()
            thread.start_new_thread(self.killNuke, ())
    def killNuke(self):
        nuke.executeInMainThread(nuke.scriptExit, ())

TestPanel('Killing Nuke').showModalDialog()


-Nathan



From: Kim Ranzani 
Sent: Sunday, August 07, 2011 7:00 AM
To: Nuke Python discussion 
Subject: Re: [Nuke-python] running nuke.scriptExit() from a panel

Hi there,

I was having the same problem restarting nuke via a python panel button and one 
workaround was to assign directly the function to the button itself like:

self.restartButton.setValue('nuke.scriptClose()')

this was working ok in 6.2 but in 6.3 something change and even if it works, I 
got a nuke6.3v2 quit unexpectedly message which is quite annoying.

I tried what Nathan said but without any luck, Is it possible to spawn the 
proxy function from knobChanged? the proxy function has to be outside the panel 
class or can be inside?probably im missing something... thanks in advance,

Kim


2011/8/2 John RA Benson <[email protected]>
I'll give it a shot -
thanks for the fast reply!

JRAB



On Aug 2, 2011, at 6:54 PM, Nathan Rusch wrote:

> One thing that works is to have a proxy function that calls 
> nuke.executeInMainThread(nuke.scriptExit), and then spawn that proxy in a new 
> thread from within your callback function (thread.start_new_thread is 
> probably the simplest way to do this).
>
> Keep in mind that scriptExit will prompt to save the current script if it's 
> modified, so you may want to make sure you either save from your script 
> callback or call nuke.modified(False) before your scriptExit callback fires.
>
> -Nathan
>
>
> -----Original Message----- From: John RA Benson
> Sent: Tuesday, August 02, 2011 9:37 AM
> To: Nuke Python discussion
> Subject: [Nuke-python] running nuke.scriptExit() from a panel
>
> Hey there -
>
> I'm trying to exit a script, but the nuke.scriptExit() is being called
> from within a callback in a panel. The problem is that nuke won't quit,
> because it's executing something else - I think the knobChanged callback
> that has the nuke.scriptExit() code in it. Is there any workaround to
> force close and exit, pythonically?
>
> thanks
> JRAB
> _______________________________________________
> Nuke-python mailing list
> [email protected], http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
> _______________________________________________
> Nuke-python mailing list
> [email protected], http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

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





--------------------------------------------------------------------------------
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
_______________________________________________
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