Since it sounds like you can access Root knob values at the point your value setup code is running, you could always pull the script views directly off the Root’s 'views' knob.
views = [line.split()[0] for line in nuke.root()['views'].toScript().splitlines()] -Nathan From: Richard Bobo Sent: Thursday, November 07, 2013 12:55 PM To: Nuke Python discussion Subject: Re: [Nuke-python] Registered PythonPanel not appearing when knobsareassigned initial values... ...All right - going on the theory that there is no way to get the list of all the views *before* my registered panel is restored - I have made a workaround. My panel actually already had a “Clear Filters” button that, amongst other things, gets a new list of filtered view names when it’s pressed. So,... I put a default string message in my type-in knobs that says, 'PRESS THE “Clear Filters” BUTTON TO INITIALIZE.’ Hahaha! So, it’s kludgey. ;^) Anyway, my panel is restoring properly - and I just have to tell the user to hit a button to get started. No big deal - just a little ugly… But, it works. Thanks for the help! And, if someone does think of a way to get the list of all of the views before the panel is restored, so I can populate the pulldowns, please let me know! 8^) Thanks, Rich On Nov 7, 2013, at 3:19 PM, Richard Bobo <[email protected]> wrote: I am now successfully restoring the panel with the script, but I only get the hero view in my pulldown menu - even though I am using nuke.views() to initialize the pulldown. If I close the panel and reopen it, I get all of the listed views. Any way to find those views when restoring the panel on the script loading? Or, is it just an order of operation problem that I won’t be able to workaround?? Thanks, Rich On Nov 7, 2013, at 3:11 PM, Richard Bobo <[email protected]> wrote: On Nov 7, 2013, at 2:33 PM, Nathan Rusch <[email protected]> wrote: Viewers don’t remember what view they were set to when the script is saved; they will always open to the script’s hero view, so you can just check nuke.root()['hero_view'].value() for your initial value. Hmm… I see. Thinking about some other approaches… I’m trying to populate some pulldowns with the list of views, but when the panel and knobs get created - as the script loads - the views aren’t available! Hmm… maybe I just won’t be able to register this panel. Maybe it will always have to be created *after* the script is opened…?? (8^\ Rich -Nathan From: Richard Bobo Sent: Thursday, November 07, 2013 11:24 AM To: Nuke Python discussion Subject: Re: [Nuke-python] Registered PythonPanel not appearing when knobs areassigned initial values... On Nov 7, 2013, at 1:56 PM, Ivan Busquets <[email protected]> wrote: Hi Rich, Looking at the code above, my guess is that an active Viewer Window can't be resolved by the time your panel is trying to open. "self.current_view = nuke.activeViewer().view()" Will error out if nuke.activeViewer() is None, and therefore the rest of your panel's initialization will never be executed. Ivan — Thanks for responding. That’s kind of what I figured, too. You might want to wrap that around to handle cases where activeViewer resolves to None, or get the information you need from somewhere else. I’m going see if I can figure out a later point in my script to get the current view — hopefully, after it’s available — and set the knob value, if that’s even possible… Thanks, Rich Hope that helps. On Thu, Nov 7, 2013 at 8:52 AM, Richard Bobo <[email protected]> wrote: I need to amend my email and correct some erroneous information… —— First of all, setting the knob value to a string, like ‘foobar’, *does* work! ...Not sure what I was doing that made the test not work before, but it does now…. ~(8^P —— Secondly, what does *not* work is setting the knob value to the result of a function. What I am actually trying to do is set the knob’s initial value to nuke.activeViewer().view(). The result is a string, but when recalling the Nuke script with a registered panel - the panel does not show. It does not matter if I set the value beforehand, either. I.e., if I do something like this: self.current_view = nuke.activeViewer().view() …then… self.partStartsWith_knob.setValue(self.current_view) —— That will work fine when initially creating the tabbed panel - but fails to show anything when the script is saved and reloaded. —— So, here’s a better test that shows the problem: import nuke import nukescripts class testpanel( nukescripts.PythonPanel ): def __init__(self): # Get the view name and assign it... self.current_view = nuke.activeViewer().view() nukescripts.PythonPanel.__init__(self, 'View Selector', 'com.richbobo.testpanel') self.partStartsWith_knob = nuke.String_Knob('startswith', 'View Name - Starts With :') self.addKnob(self.partStartsWith_knob) # Set the initial view name value to the knob... self.partStartsWith_knob.setValue(self.current_view) —— Sorry for the confusion! Rich On Nov 7, 2013, at 10:58 AM, Richard Bobo <[email protected]> wrote: OK, here's an interesting problem... Well, it's "interesting" in the sense that I can't figure out how to solve it!! (8^\ ---- When I add a custom PythonPanel to the Pane menu, create it as a tab, save the Nuke script and recall it - the panel does not appear! ---- The thing that is causing it to *not* appear is assigning an initial value to the knob. If I don't assign an initial value, the panel appears in the tab, as expected. This happens with more than one type of knob, by the way. It seems to be a general problem... ---- For debugging purposes, I am making a simple PythonPanel and adding a String_Knob to it. If I comment out the last .setValue line, the tabbed panel saves and restores with the Nuke script without a problem. If I assign a default value, it doesn't. ---- Here's the test class: import nuke import nukescripts class testpanel( nukescripts.PythonPanel ): def __init__(self): nukescripts.PythonPanel.__init__(self, 'View Selector', 'com.richbobo.testpanel') self.partStartsWith_knob = nuke.String_Knob('startswith', 'View Name - Starts With :') self.addKnob(self.partStartsWith_knob) self.partStartsWith_knob.setValue('foobar') ---- Here's what I have in my menu.py: import test_panel def addtestpanel(): global testpanel testpanel = test_panel.testpanel() testpanel.addToPane() return testpanel nuke.menu('Pane').addCommand( 'testpanel', addtestpanel ) nukescripts.registerPanel( 'com.richbobo.testpanel', addtestpanel ) --- Note that there are no errors reported when the panel does not appear. It seems that assigning initial values to the knobs of a registered panels somehow interrupts the mechanism that causes the panel to show. How do I make sure to insert initial values in the knobs - without causing the registered PythonPanel to not show?!? Thanks for any help, Rich Rich Bobo Senior VFX Compositor Email: [email protected] Mobile: 248.840.2665 Web: http://richbobo.com _______________________________________________ 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 _______________________________________________ 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
