Go to: Synopsis. Return value. Flags. Python examples.
formLayout(
[string]
, [annotation=string], [attachControl=[string, string, int, string]], [attachForm=[string, string, int]], [attachNone=[string, string]], [attachOppositeControl=[string, string, int, string]], [attachOppositeForm=[string, string, int]], [attachPosition=[string, string, int, int]], [backgroundColor=[float, float, float]], [childArray=boolean], [defineTemplate=string], [docTag=string], [dragCallback=script], [dropCallback=script], [enable=boolean], [enableBackground=boolean], [enableKeyboardFocus=boolean], [exists=boolean], [fullPathName=boolean], [generalSpacing=int], [height=int], [highlightColor=[float, float, float]], [isObscured=boolean], [manage=boolean], [margins=int], [noBackground=boolean], [numberOfChildren=boolean], [numberOfDivisions=int], [numberOfPopupMenus=boolean], [parent=string], [popupMenuArray=boolean], [preventOverride=boolean], [statusBarMessage=string], [useTemplate=string], [visible=boolean], [visibleChangeCommand=script], [width=int])
Note: Strings representing object names and arguments must be separated by commas. This is not depicted in the synopsis.
formLayout is undoable, queryable, and editable.
This command creates a form layout control. A form layout allows
absolute and relative positioning of the controls that are
its immediate children.
Controls have four edges: top, left, bottom and right.
There are only two directions that children can be positioned in,
right-left and up-down. The attach flags take the direction of
an attachment from the argument that names the edge to attach
(the second argument). Any or all edges of a child may be
attached. There are six ways to attach them:
- Attach to Form - Attaches an edge to the relevant side
of the form layout. Thus -attachForm button3 "left" will
attach the left edge of the button to the left edge of the form.
- Attach to Opposite Side of Form - Attaches an edge relative to
the furthest side of the form layout.
- Attach to Another Control - Attaches an edge to the closest
edge of the other control named.
- Attach to Opposite Side of Another Control - Attaches an edge
relative to the furthest side of another control.
- Attach to Position - Attaches an edge to a position
on the form layout. The position is given as a fixed fraction
of the -nd/numDivisions value and as this value defaults to 100
it is easiest to think of it as a percentage of the form's
size.
- Attach to Nothing - Attaches an edge to nothing.
The size of the child control will determine this edge's
position.
Each edge attachment may have an offset that acts to separate
controls visually.
There is no default positioning relationship so to have children
appear in the form they must have at least one edge attached in
each direction.
Note: In the flag definitions the arguments follow these
rules:
- control must
be the name of an immediate child of the form layout.
- edge must be one of "top", "left", "bottom", or
"right".
- position may range from 0 to the number of
divisions as specified with the -nd/numberOfDivisions flag
and gives the fraction of the width of the form as a measurement.
This normally means 0-100 so position may be thought
of as a percentage.
- offset is an integer value in pixels.
These are multi-use flags so any number of attachments
may be made in a single command.
Note: Avoid making control attachments that form a loop in
control dependencies. For example:
window;
string $form = `formLayout`;
string $btn1 = `button`;
string $btn2 = `button`;
string $btn3 = `button`;
formLayout -edit
-attachControl $btn2 "top" 2 $btn1
-attachControl $btn3 "top" 2 $btn2
-attachControl $btn1 "right" 2 $btn3
$form;
showWindow;
$btn2 is attached to $btn1, $btn3 is attached to $btn2, and $btn1 is
attached to $btn3. Thus, the placement of $btn1 is dependent on the
placement of $btn3, which is dependent on the placement of $btn2, which
is dependent on the placement of $btn1. The last control attachment will
have created a loop in the dependencies.
To prevent runtime errors, Maya will ignore this attachment and instead
issue a warning that a cyclical control attachment has been detected in
the script.
string | The full name of the control. |
In query mode, return type is based on queried flag.
annotation, attachControl, attachForm, attachNone, attachOppositeControl, attachOppositeForm, attachPosition, backgroundColor, childArray, defineTemplate, docTag, dragCallback, dropCallback, enable, enableBackground, enableKeyboardFocus, exists, fullPathName, generalSpacing, height, highlightColor, isObscured, manage, margins, noBackground, numberOfChildren, numberOfDivisions, numberOfPopupMenus, parent, popupMenuArray, preventOverride, statusBarMessage, useTemplate, visible, visibleChangeCommand, width
Long name (short name) |
Argument types |
Properties |
|
annotation(ann)
|
string
|
|
|
Annotate the control with an extra string value.
|
|
attachControl(ac)
|
[string, string, int, string]
|
|
|
Arguments are: control, edge, offset, control
Valid edge values are: "top" | "bottom" | "left" | "right".
Attach a control to another control.
|
|
attachForm(af)
|
[string, string, int]
|
|
|
Arguments are: control, edge, offset.
Valid edge values are: "top" | "bottom" | "left" | "right".
Attach the specified control to the form, offset by the specified
amount.
|
|
attachNone(an)
|
[string, string]
|
|
|
Arguments are: control, edge
Valid edge values are: "top" | "bottom" | "left" | "right".
Attach a control to nothing.
|
|
attachOppositeControl(aoc)
|
[string, string, int, string]
|
|
|
Arguments are: control, edge, offset, control
Valid edge values are: "top" | "bottom" | "left" | "right".
Attach a control to the opposite side of another control.
|
|
attachOppositeForm(aof)
|
[string, string, int]
|
|
|
Arguments are: control, edge, offset.
Valid edge values are: "top" | "bottom" | "left" | "right".
Attach a control to the opposite side of the form.
|
|
attachPosition(ap)
|
[string, string, int, int]
|
|
|
Arguments are: control, edge, offset, position
Valid edge values are: "top" | "bottom" | "left" | "right".
Attach a control to a position in the form.
|
|
backgroundColor(bgc)
|
[float, float, float]
|
|
|
The background color of the control. The arguments correspond
to the red, green, and blue color components. Each component ranges
in value from 0.0 to 1.0.
When setting backgroundColor, the background is automatically
enabled, unless enableBackground is also specified with a false
value.
|
|
childArray(ca)
|
boolean
|
|
|
Returns a string array of the names of the layout's
immediate children.
|
|
defineTemplate(dt)
|
string
|
|
|
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)
|
string
|
|
|
Add a documentation flag to the control. The documentation flag
has a directory structure.
(e.g., -dt render/multiLister/createNode/material)
|
|
dragCallback(dgc)
|
script
|
|
|
Adds a callback that is called when the middle mouse button
is pressed. The MEL version of the callback is of the form:
global proc string[] callbackName(string $dragControl, int $x, int $y, int $mods)
The proc returns a string array that is transferred to the drop site.
By convention the first string in the array describes the user settable
message type. Controls that are application defined drag sources may
ignore the callback. $mods allows testing for the key modifiers CTRL and
SHIFT. Possible values are 0 == No modifiers, 1 == SHIFT, 2 == CTRL,
3 == CTRL + SHIFT.
In Python, it is similar, but there are two ways to specify the callback. The
recommended way is to pass a Python function object as the argument. In that
case, the Python callback should have the form:
def callbackName( dragControl, x, y, modifiers ):
The values of these arguments are the same as those for the MEL version above.
The other way to specify the callback in Python is to specify a string to be
executed. In that case, the string will have the values substituted into it
via the standard Python format operator. The format values are passed in a
dictionary with the keys "dragControl", "x", "y", "modifiers". The
"dragControl" value is a string and the other values are integers (eg the
callback string could be "print '%(dragControl)s %(x)d %(y)d %(modifiers)d'")
|
|
dropCallback(dpc)
|
script
|
|
|
Adds a callback that is called when a drag and drop
operation is released above the drop site. The MEL version of the callback is
of the form:
global proc callbackName(string $dragControl, string $dropControl, string $msgs[], int $x, int $y, int $type)
The proc receives a string array that is transferred from the drag source.
The first string in the msgs array describes the user defined message type.
Controls that are application defined drop sites may ignore the
callback. $type can have values of 1 == Move, 2 == Copy, 3 == Link.
In Python, it is similar, but there are two ways to specify the callback. The
recommended way is to pass a Python function object as the argument. In that
case, the Python callback should have the form:
def pythonDropTest( dragControl, dropControl, messages, x, y, dragType ):
The values of these arguments are the same as those for the MEL version above.
The other way to specify the callback in Python is to specify a string to be
executed. In that case, the string will have the values substituted into it
via the standard Python format operator. The format values are passed in a
dictionary with the keys "dragControl", "dropControl", "messages", "x", "y",
"type". The "dragControl" value is a string and the other values are integers
(eg the callback string could be
"print '%(dragControl)s %(dropControl)s %(messages)r %(x)d %(y)d %(type)d'")
|
|
enable(en)
|
boolean
|
|
|
The enable state of the control. By default, this flag is
set to true and the control is enabled. Specify false and the control
will appear dimmed or greyed-out indicating it is disabled.
|
|
enableBackground(ebg)
|
boolean
|
|
|
Enables the background color of the control.
|
|
enableKeyboardFocus(ekf)
|
boolean
|
|
|
If enabled, the user can navigate to the control with the tab key and select values with the keyboard or mouse.
This flag would typically be used to turn off focus support from controls that get it by default, like Edit and List controls.
If disabled, text in text fields can still be selected with the mouse but cannot be copied (except on Linux when "Middle Click Paste" is enabled).
|
|
exists(ex)
|
boolean
|
|
|
Returns whether the
specified object exists or not. Other flags are ignored.
|
|
fullPathName(fpn)
|
boolean
|
|
|
Return the full path name of the widget, which includes all the parents.
|
|
generalSpacing(gsp) 2024
|
int
|
|
|
Sets the spacing for this layout.
|
|
height(h)
|
int
|
|
|
The height of the control. The control will attempt to
be this size if it is not overruled by parent layout conditions.
|
|
highlightColor(hlc)
|
[float, float, float]
|
|
|
The highlight color of the control. The arguments correspond
to the red, green, and blue color components. Each component ranges
in value from 0.0 to 1.0.
|
|
isObscured(io)
|
boolean
|
|
|
Return whether the control can actually be seen by the user.
The control will be obscured if its state is invisible, if it is
blocked (entirely or partially) by some other control, if it or a
parent layout is unmanaged, or if the control's window is
invisible or iconified.
|
|
manage(m)
|
boolean
|
|
|
Manage state of the control. An unmanaged control is
not visible, nor does it take up any screen real estate. All
controls are created managed by default.
|
|
margins(mar) 2024
|
int
|
|
|
Sets the content margins for this layout.
|
|
noBackground(nbg)
|
boolean
|
|
|
Clear/reset the control's background.
Passing true means the background should not be drawn at all, false means the background should be drawn. The state of this flag is inherited by children of this control.
|
|
numberOfChildren(nch)
|
boolean
|
|
|
Returns in an int the number of immediate children of the layout.
|
|
numberOfDivisions(nd)
|
int
|
|
|
Specify the number of horizontal and vertical divisions
across the form. Value must be greater than 0.
|
|
numberOfPopupMenus(npm)
|
boolean
|
|
|
Return the number of popup menus attached to this control.
|
|
parent(p)
|
string
|
|
|
The parent layout for this control.
|
|
popupMenuArray(pma)
|
boolean
|
|
|
Return the names of all the popup menus attached to this
control.
|
|
preventOverride(po)
|
boolean
|
|
|
If true, this flag prevents overriding the control's
attribute via the control's right mouse button menu.
|
|
statusBarMessage(sbm)
|
string
|
|
|
Extra string to display in the status bar when the mouse is over the control.
|
|
useTemplate(ut)
|
string
|
|
|
Forces the command to use a command template other than
the current one.
|
|
visible(vis)
|
boolean
|
|
|
The visible state of the control. A control is created
visible by default. Note that a control's actual appearance is
also dependent on the visible state of its parent layout(s).
|
|
visibleChangeCommand(vcc)
|
script
|
|
|
Command that gets executed when visible state of the control changes.
|
|
width(w)
|
int
|
|
|
The width of the control. The control will attempt to
be this size if it is not overruled by parent layout conditions.
|
|
Flag can appear in Create mode of command
|
Flag can appear in Edit mode of command
|
Flag can appear in Query mode of command
|
Flag can have multiple arguments, passed either as a tuple or a list.
|
import maya.cmds as cmds
window = cmds.window()
form = cmds.formLayout(numberOfDivisions=100)
b1 = cmds.button()
b2 = cmds.button()
column = cmds.columnLayout()
cmds.button()
cmds.button()
cmds.button()
cmds.formLayout( form, edit=True, attachForm=[(b1, 'top', 5), (b1, 'left', 5), (b2, 'left', 5), (b2, 'bottom', 5), (b2, 'right', 5), (column, 'top', 5), (column, 'right', 5) ], attachControl=[(b1, 'bottom', 5, b2), (column, 'bottom', 5, b2)], attachPosition=[(b1, 'right', 5, 75), (column, 'left', 0, 75)], attachNone=(b2, 'top') )
cmds.showWindow( window )