pymel.core.windows.scriptedPanel

scriptedPanel(*args, **kwargs)

This command will create an instance of the specified scriptedPanelType. A panel is a collection of UI objects (buttons, fields, graphical views) that are grouped together. A panel can be moved around as a group within the application interface, and torn off to exist in its own window. The panel takes care of maintaining the state of its UI when it is relocated, or recreated. A scripted panel is a panel that is defined in MEL, with all of the required callbacks available as MEL proc’s.

Flags:

Long Name / Short Name Argument Types Properties
control / ctl bool ../../../_images/query.gif
  Returns the top level control for this panel. Usually used for getting a parent to attach popup menus. CAUTION: panels may not have controls at times. This flag can return if no control is present.
copy / cp unicode ../../../_images/edit.gif
  Makes this panel a copy of the specified panel. Both panels must be of the same type.
createString / cs bool ../../../_images/edit.gif
  Command string used to create a panel
defineTemplate / dt unicode ../../../_images/create.gif
  Puts the command in a mode where any other flags and arguments are parsed and added to the command template specified in the argument. They will be used as default arguments in any subsequent invocations of the command when templateName is set as the current template.
docTag / dtg unicode ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
  Attaches a tag to the Maya panel.
editString / es bool ../../../_images/edit.gif
  Command string used to edit a panel
exists / ex bool ../../../_images/create.gif
  Returns whether the specified object exists or not. Other flags are ignored.
init / init bool ../../../_images/create.gif ../../../_images/edit.gif
  Initializes the panel’s default state. This is usually done automatically on file -new and file -open.
isUnique / iu bool ../../../_images/query.gif
  Returns true if only one instance of this panel type is allowed.
label / l unicode ../../../_images/query.gif ../../../_images/edit.gif
  Specifies the user readable label for the panel.
menuBarRepeatLast / mrl bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
  Controls whether clicking on the menu header with the middle mouse button would repeat the last selected menu item.
menuBarVisible / mbv bool ../../../_images/create.gif ../../../_images/query.gif ../../../_images/edit.gif
  Controls whether the menu bar for the panel is displayed.
needsInit / ni bool ../../../_images/query.gif ../../../_images/edit.gif
  (Internal) On Edit will mark the panel as requiring initialization. Query will return whether the panel is marked for initialization. Used during file -new and file -open.
parent / p unicode ../../../_images/create.gif
  Specifies the parent layout for this panel.
popupMenuProcedure / pmp script ../../../_images/query.gif ../../../_images/edit.gif
  Specifies the procedure called for building the panel’s popup menu(s). The default value is buildPanelPopupMenu. The procedure should take one string argument which is the panel’s name.
replacePanel / rp unicode ../../../_images/edit.gif
  Will replace the specified panel with this panel. If the target panel is within the same layout it will perform a swap.
tearOff / to bool ../../../_images/query.gif ../../../_images/edit.gif
  Will tear off this panel into a separate window with a paneLayout as the parent of the panel. When queried this flag will return if the panel has been torn off into its own window.
tearOffCopy / toc unicode ../../../_images/create.gif
  Will create this panel as a torn of copy of the specified source panel.
tearOffRestore / tor bool ../../../_images/create.gif ../../../_images/edit.gif
  Restores panel if it is torn off and focus is given to it. If docked, becomes the active panel in the docked window. This should be the default flag that is added to all panels instead of -to/-tearOffflag which should only be used to tear off the panel.
type / typ unicode ../../../_images/create.gif ../../../_images/query.gif
  This flag specifies the type of scripted panel to create.
unParent / up bool ../../../_images/edit.gif
  Specifies that the panel should be removed from its layout. This (obviously) cannot be used with query.
useTemplate / ut unicode ../../../_images/create.gif
  Forces the command to use a command template other than the current one. Flag can have multiple arguments, passed either as a tuple or a list.

Derived from mel command maya.cmds.scriptedPanel

Example:

import pymel.core as pm

// NOTE: The scriptedPanelType command does not support python
//               callbacks; these callbacks must be MEL.


global proc sampleCreateCallback(string $panelName) {
//
//  Description:
//      Create any editors unparented here and do
//      any other initialization required.
//
//      In this example we will only declare a global array to
//        maintain some state information.
//
    global float $gSampleState[5];

}


global proc sampleInitCallback(string $panelName) {
//
//  Description:
//      Re-initialize the panel on file -new or file -open.
//
//      In this example we will only re-init the global array.
//
    global float $gSampleState[];

       $gSampleState[0] = 20.2;
       $gSampleState[1] = 50.5;
       $gSampleState[2] = 34.7;
       $gSampleState[3] = 2.0;
       $gSampleState[4] = 1.0;

}

global proc sampleAddCallback(string $panelName) {
//
//  Description:  Create UI and parent any editors.
//
    global float $gSampleState[];

    columnLayout -adj true topCol;
    separator -style "none" -h 10;
        frameLayout -l "Sliders" -mw 10;
            columnLayout -adj true sampleCol;
                separator -style "none" -h 10;

                floatSliderGrp -l "Property A" -f true
                    -v $gSampleState[0]
                    fsg1;
                floatSliderGrp -l "Property B" -f true
                    -v $gSampleState[1]
                    fsg2;
                floatSliderGrp -l "Property C" -f true
                    -v $gSampleState[2]
                    fsg3;
                separator -style "none" -h 10;
            setParent ..;
        setParent ..;

        separator -style "none" -h 10;
        frameLayout -l "Radio Buttons" -mw 10;
            columnLayout sampleCol2;
                separator -style "none" -h 10;
                radioButtonGrp -nrb 3
                    -l "Big Options"
                    -la3 "Option 1" "Option 2" "Option 3"
                    -select $gSampleState[3]
                    rbg;
                radioButtonGrp -nrb 3
                    -l "Little Options"
                    -la3 "Option 4" "Option 5" "Option 6"
                    -select $gSampleState[4]
                    rbg2;
                separator -style "none" -h 10;

}

global proc sampleRemoveCallback(string $panelName) {
//
//  Description:
//        Unparent any editors and save state if required.
//
        global float $gSampleState[];
       //  Scope the control names to this panel.
       //
       string $control = `scriptedPanel -q -control $panelName`;
       setParent $control;

       $gSampleState[0] = `floatSliderGrp -q -v fsg1`;
       $gSampleState[1] = `floatSliderGrp -q -v fsg2`;
       $gSampleState[2] = `floatSliderGrp -q -v fsg3`;
       $gSampleState[3] = `radioButtonGrp -q -sl rbg`;
       $gSampleState[4] = `radioButtonGrp -q -sl rbg2`;
}

global proc sampleDeleteCallback(string $panelName) {
//
//  Description:
//        Delete any editors and do any other cleanup required.

}

global proc string sampleSaveStateCallback(string $panelName) {
//
//  Description:
//        Return a string that will restore the current state
//        when it is executed.

        global float $gSampleState[];
       $indent = "\n\t\t\t";

       return ($indent+"$gSampleState[0]="+$gSampleState[0]+";" +
               $indent+"$gSampleState[1]="+$gSampleState[1]+";" +
               $indent+"$gSampleState[2]="+$gSampleState[2]+";" +
               $indent+"$gSampleState[3]="+$gSampleState[3]+";" +
               $indent+"$gSampleState[4]="+$gSampleState[4]+";" +
               $indent+"setSamplePanelState $panelName;\n" );
}

global proc setSamplePanelState( string $whichPanel ) {
//
//  Description:
//        This is a convenience proc to set the panel state from the
//        global array

        global float $gSampleState[];

       //  Scope the control names to this panel.
       //
       string $control = `scriptedPanel -q -control $whichPanel`;
       if ("" != $control) {
              setParent $control;

              floatSliderGrp -e -v $gSampleState[0] fsg1;
              floatSliderGrp -e -v $gSampleState[1] fsg2;
              floatSliderGrp -e -v $gSampleState[2] fsg3;
              if (0 != $gSampleState[3]) {
               radioButtonGrp -e -sl $gSampleState[3] rbg;
              };
           if (0 != $gSampleState[4]) {
               radioButtonGrp -e -sl $gSampleState[4] rbg2;
           }
       }
}

# Below is the python code to create and use scriptedPanelType and scriptedPanel using the MEL
# callbacks defined above.

# Use unique flag as we don't want two panels sharing the same global data.
pm.scriptedPanelType( 'sampleScriptedPanelType', ccb='sampleCreateCallback', icb='sampleInitCallback', acb='sampleAddCallback', rcb='sampleRemoveCallback', dcb='sampleDeleteCallback', scb='sampleSaveStateCallback', unique=True )

#  This script will create an unparented scripted panel, place it
#  in one window, remove it, and place it in another window then
#  return it to the first window.
#
#
#  Create unparented scripted panel
#
pm.scriptedPanel( 'sampleScriptedPanel', unParent=True, type='sampleScriptedPanelType', label='Sample' )

#    Create a couple of windows and parent the scripted panel to the first.
#
pm.window( 'sampleWin' )
pm.frameLayout( 'frm', lv=False, bv=False )
pm.scriptedPanel( 'sampleScriptedPanel', e=True, parent='sampleWin|frm' )
pm.showWindow()

pm.window( 'sampleWin2', w=pm.window('sampleWin', q=True, w=True), h=pm.window('sampleWin', q=True, h=True) )
pm.frameLayout( 'frm', lv=False, bv=False )
pm.showWindow()

#    Reparent the scripted panel to the second window.
#
pm.scriptedPanel( 'sampleScriptedPanel', e=True, unParent=True )
pm.scriptedPanel( 'sampleScriptedPanel', e=True, parent='sampleWin2|frm' )

#    Reparent the scripted panel back to the first window.
#
pm.scriptedPanel( 'sampleScriptedPanel', e=True, unParent=True )
pm.scriptedPanel( 'sampleScriptedPanel', e=True, parent='sampleWin|frm' )

#    Close both windows
#
pm.window( 'sampleWin', e=True, visible=False )
pm.window( 'sampleWin2', e=True, visible=False )

#    The scripted panel should appear in the Panel menu.  Select
#    Panels-"Panel-"Sample and the panel should appear in the main window.
#