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.

-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

Reply via email to