From: blur959 on
Hi, all, I wonder if my post is relevant here, but i will still post
it anyway. I am working on creating a custom UI inside Maya and I
encountered some problems. Firstly, I am trying to create a textfield
button that creates a locator-shaped curve based on the coordinates
the user keyed into the text field. However I got no idea how to go
about doing it properly. I hope you guys could give me some help.
Thanks. I attached my code below. My code isn't working though. I have
this error, which says button2 is not defined. I got no clue on how
else to debug.

import maya.cmds as cmds

def createMyLayout():
window = cmds.window(widthHeight=(1000, 600), title="test",
resizeToFitChildren=1)
cmds.rowLayout("button1, button2, button3", numberOfColumns=5)

cmds.columnLayout(adjustableColumn=True, columnAlign="center",
rowSpacing=10)

button2 = cmds.textFieldButtonGrp(label="LocatorCurve",
text="Please key in your
coordinates",
changeCommand=edit_curve,
buttonLabel="Execute",
buttonCommand=locator_curve)


cmds.setParent(menu=True)

cmds.showWindow(window)

def locator_curve(*args):
# Coordinates of the locator-shaped curve.
crv = cmds.curve(degree=1,
point=[(1, 0, 0),
(-1, 0, 0),
(0, 0, 0),
(0, 1, 0),
(0, -1, 0),
(0, 0, 0),
(0, 0, 1),
(0, 0, -1),
(0, 0, 0)])


return crv

def edit_curve(*args):
parts = button2.split(",")
print parts
x = parts[0]
y = parts[1]
z = parts[2]


createMyLayout()


From: MRAB on
blur959 wrote:
> Hi, all, I wonder if my post is relevant here, but i will still post
> it anyway. I am working on creating a custom UI inside Maya and I
> encountered some problems. Firstly, I am trying to create a textfield
> button that creates a locator-shaped curve based on the coordinates
> the user keyed into the text field. However I got no idea how to go
> about doing it properly. I hope you guys could give me some help.
> Thanks. I attached my code below. My code isn't working though. I have
> this error, which says button2 is not defined. I got no clue on how
> else to debug.
>
> import maya.cmds as cmds
>
> def createMyLayout():
[snip]
> button2 = cmds.textFieldButtonGrp(label="LocatorCurve",
> text="Please key in your
> coordinates",
> changeCommand=edit_curve,
> buttonLabel="Execute",
> buttonCommand=locator_curve)
>
[snip]

When you assign to a name in a function the target is by default local
to that function, so 'button2' is local to 'createMyLayout'. Add the
line:

global button2

to the function to make it visible to the rest of the module/file.