def show(self):
u"""Window???"""
self.safe_delete_ui(RecentFileWindow._WINDOW_NAME)
cmds.window(RecentFileWindow._WINDOW_NAME, title=RecentFileWindow._WINDOW_TITLE)
cmds.frameLayout(label="RecentFiles",
marginWidth=6,
marginHeight=6,
borderStyle="etchedIn")
for file_path, file_type in get_recent_files().items():
cmds.button(label=file_path, c=partial(self._open_file, file_path, file_type))
cmds.showWindow(RecentFileWindow._WINDOW_NAME)
python类button()的实例源码
def _create_ui(self):
safe_delete_window(self._WINDOW_NAME)
win = cmds.window(self._WINDOW_NAME)
form = cmds.formLayout()
field_group = cmds.columnLayout(adj=True, cal="center", rs=self._MARGIN)
cmds.text(u"????????focalLength?????Unity?FOV?????????????", al="left")
self.text_scroll = cmds.textScrollList(append=self._get_cameras(), ams=False, dcc=self._select)
self.text_field = cmds.textFieldGrp(l=u"FOV", ad2=2, cl2=["left", "left"], cw=[1, 60])
self.result_field = cmds.textFieldGrp(l=u"Result", ad2=2, cl2=["left", "left"], cw=[1, 60])
cmds.setParent("..")
button_group = cmds.columnLayout(adj=True, cal="center")
cmds.button(l="Apply", c=self._apply)
cmds.setParent("..")
cmds.formLayout(form, e=True,
attachForm=[(field_group, "top", self._MARGIN),
(field_group, "left", self._MARGIN),
(field_group, "right", self._MARGIN),
(button_group, "bottom", self._MARGIN),
(button_group, "left", self._MARGIN),
(button_group, "right", self._MARGIN)],
attachControl=[(button_group, "top", self._MARGIN, field_group)])
cmds.setParent("..")
cmds.showWindow(win)
def enableRange(self, *args):
"""toggles the frame range option on/off depending on what's selected in the range radio grp"""
#get the value of the radio button grp
sel = cmds.radioButtonGrp(self.widgets["timeRBG"], q=True, sl=True)
if sel == 3:
cmds.floatFieldGrp(self.widgets["rangeFFG"], e=True, en=True)
else:
cmds.floatFieldGrp(self.widgets["rangeFFG"], e=True, en=False)
def curveJntRigUI(*args):
if cmds.window("crvRigJntWin", exists=True):
cmds.deleteUI("crvRigJntWin")
w, h= 400, 300
widgets["win"] = cmds.window("crvRigJntWin", t="zbw_curveJntRig", w=w,h=h)
widgets["mainCLO"] = cmds.columnLayout()
widgets["numCtrlIFG"] = cmds.intFieldGrp(l="Number of Ctrls:", cal=[(1,"left"), (2,"left")], cw=[(1,120), (2,50)], v1=5)
widgets["nameTFG"] = cmds.textFieldGrp(l="Rig Name (i.e. lfEye):", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], tx="eye")
widgets["cntrPivTFBG"] = cmds.textFieldButtonGrp(l="Center pivot object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "cntrPivTFBG"), cc=partial(secondFill, "center"), tx="centerLoc")
widgets["upLocTFBG"] = cmds.textFieldButtonGrp(l="Aim up object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "upLocTFBG"), cc=partial(secondFill, "up"), tx="upLoc")
cmds.separator(h=10)
widgets["upCrvTFBG"] = cmds.textFieldButtonGrp(l="First Curve", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "upCrvTFBG"),tx="topCrv")
widgets["upNameTFG"] = cmds.textFieldGrp(l="1st Suffix (i.e.'Top')", cal=[(1,"left"), (2,"left")], cw=[(1,120), (2,280)], tx="Top")
cmds.separator(h=10)
widgets["secondCBG"] = cmds.checkBoxGrp(l="Create Second Curve?", ncb=1, v1=0, cal=[(1,"left"), (2,"left")], cc=toggleSecond, en=True)
widgets["downCrvTFBG"] = cmds.textFieldButtonGrp(l="Second Curve", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], en=False, cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "downCrvTFBG"), tx="downCrv")
widgets["downNameTFG"] = cmds.textFieldGrp(l="2nd Suffix (i.e. 'Dwn')", cal=[(1,"left"), (2,"left")], cw=[(1,120), (2,280)], en=False, tx="Dwn")
widgets["cntrPiv2TFBG"] = cmds.textFieldButtonGrp(l="Center pivot object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "cntrPivTFBG"), en=False, tx="centerLoc")
widgets["upLoc2TFBG"] = cmds.textFieldButtonGrp(l="Aim up object:", bl="<<<", cal=[(1,"left"), (2,"left"), (3,"left")], cw=[(1,120), (2,280), (3,30)], bc=partial(populateCrvField, "upLoc2TFBG"), en=False, tx="upLoc")
cmds.separator(h=10)
widgets["execBut"] = cmds.button(l="create base rig!", w=w, c=passToExecute)
widgets["cnctBut"] = cmds.button(l="connect ctrls to jnts", w=w, c=connectProxies)
widgets["closeBut"] = cmds.button(l="setup smart close", w=w, c=smartClose)
cmds.separator(h=10)
# widgets["scCBG"] = cmds.checkBoxGrp(l="Set up smart close?", ncb=1, v1=0, cal=[(1,"left"), (2,"left")], en=True)
cmds.window(widgets["win"], e=True, w=5, h=5, resizeToFitChildren=True, sizeable=True)
cmds.showWindow(widgets["win"])
def toggleSecond(*args):
state = cmds.checkBoxGrp(widgets["secondCBG"], q=True, v1=True)
if state:
cmds.textFieldButtonGrp(widgets["downCrvTFBG"], e=True, en=True)
cmds.textFieldButtonGrp(widgets['cntrPiv2TFBG'], e=True, en=True)
cmds.textFieldButtonGrp(widgets['upLoc2TFBG'], e=True, en=True)
cmds.textFieldGrp(widgets["downNameTFG"], e=True, en=True)
cmds.button(widgets["closeBut"], e=True, en=True)
else:
cmds.textFieldButtonGrp(widgets['downCrvTFBG'], e=True, en=False)
cmds.textFieldButtonGrp(widgets['cntrPiv2TFBG'], e=True, en=False)
cmds.textFieldButtonGrp(widgets['upLoc2TFBG'], e=True, en=False)
cmds.textFieldGrp(widgets["downNameTFG"], e=True, en=False)
cmds.button(widgets["closeBut"], e=True, en=False)
def setPlanes(*args):
"""sets clipping planes for cameras based on float fields in UI. Depending on radio button, it will either do all camera or only selected"""
all = cmds.radioButtonGrp("camRBG", q=True, sl=True)
far = cmds.floatFieldGrp("farFFG", q=True, v1=True)
near = cmds.floatFieldGrp("nearFFG", q=True, v1=True)
cams = []
if all==1:
cams.extend(cmds.ls(type="camera"))
elif all==2:
transf = cmds.ls(sl=True, type="transform")
for each in transf:
shape = cmds.listRelatives(each, s=True)
if shape:
if cmds.objectType(shape) == "camera":
cams.extend(shape)
#for each, set shape.farClipPlane 100000
if cams:
print cams
for cam in cams:
try:
cmds.setAttr("%s.farClipPlane"%cam, far)
cmds.setAttr("%s.nearClipPlane"%cam, near)
except:
cmds.warning("Couldn't change the farClipPlane of %s"%cam)
def spaceBufferUI(*args):
if cmds.window("spaceBufferWin", exists=True):
cmds.deleteUI("spaceBufferWin")
widgets["win"] = cmds.window("spaceBufferWin", rtf=True, wh=(200, 20))
widgets["mainCLO"] = cmds.columnLayout(w=200)
widgets["jntCreateBut"] = cmds.button(l="Create Joint/Grps at Selection!", w=200, h=30, bgc=(.6, .8,.6), c=createJointFromObj)
widgets["makeBuffer"] = cmds.button(l="Create Space Buffer!", w=200, h=30, bgc=(.4, .6, .8), c=createSpaceBuffers)
cmds.window(widgets["win"], e=True, wh=(5, 5), rtf=True)
cmds.showWindow(widgets["win"])
def confirmDialog(message = "confirm?", *args):
"""
just returns Yes or No
Args:
message(string): the message to display
Return:
string: "Yes" or "No"
"""
dial = cmds.confirmDialog(t="Confirm?", m=message, button=["Yes", "No"], dismissString="No")
return(dial)
def huddleUI(*args):
if cmds.window("hudWin", exists=True):
cmds.deleteUI("hudWin")
widgets["win"] = cmds.window("hudWin", t="zbw_huddle", w=350, h=100, rtf=True)
widgets["CLO"] = cmds.columnLayout()
widgets["slider"] = cmds.floatSliderGrp(min=0, max=2, f=True, label="Factor:", cal=([1, "left"], [2,"left"], [3,
"left"]), cw=([1,50],[2,50],[3,225]), pre=3, v=1.0)
cmds.separator(h=20)
widgets["button"] = cmds.button(l="Move objects aroudnd first selected", w=350, h=30, bgc=(.6,.8, .6), c=huddleExec)
cmds.window(widgets["win"], e=True, w=5, h=5, rtf=True)
cmds.showWindow(widgets["win"])
def grabSel(*args):
del selection[:] # empty the variable
sel = cmds.ls(sl=True, fl=True)
for obj in sel:
selection.append(obj)
if selection:
cmds.button(widgets["checkBut"], e=True, bgc = (.8, .7, .5), en = True)
else:
cmds.button(widgets["checkBut"], e=True, bgc = (.5, .5, .5), en=False)
def extendUI(*args):
"""UI for the script"""
#UI
if cmds.window("curbWin", exists=True):
cmds.deleteUI("curbWin")
cmds.window("curbWin", t="zbw_polyExtender", w=200, h=200)
cmds.columnLayout("colLO")
cmds.frameLayout("topFrame", l="Covert Edge", cll=True, bgc=(.2,.2,.2))
cmds.text("Select poly edge to convert")
cmds.button("convertBut", l="Convert!", w=200, h=30, bgc=(.8, .8,.6), c=convertEdge)
cmds.separator(h=5)
cmds.setParent("colLO")
cmds.frameLayout("midFrame", l="Create Poly", cll=True, bgc=(.2,.2,.2))
cmds.text("Select curve")
cmds.separator(h=5)
cmds.textFieldGrp("name", l="Name", w=200, cw=[(1,30), (2,170)], tx="newPoly")
cmds.checkBox("curbCB", l="Positive Direction", v=True)
# cmds.checkBox("bumpCB", l="Add vertical hump?", v=True)
cmds.floatFieldGrp("curbFFG", l="Curb Width", cal=((1, "left"),(2,"left")), cw=([1,75],[2,50]), v1=10)
cmds.intFieldGrp("UDivIFG", l="Width Subdivisions", cal=((1, "left"),(2,"left")), cw=([1,75],[2,50]), v1=1)
cmds.intFieldGrp("VDivIFG", l="Length Subdivisions", cal=((1, "left"),(2,"left")), cw=([1,75],[2,50]), v1=1)
cmds.checkBox("polyHistory", l="Keep history on final poly?", v=False)
cmds.checkBox("history", l="Keep history objects?", v=True, cc=enableHistory)
cmds.separator(h=5)
cmds.button("curbBut", l="Create Curb", h=40, w=200, bgc=(.6, .8, .6), c=extendPoly)
cmds.showWindow("curbWin")
cmds.window("curbWin", e=True, h=150, w=200)
def zbw_playblast():
pass
#hide all but geo, bckgrnd color, where to save, size, camera, etc
#more of a view/visibility thing with some playblast options added (revert back to previous view?) could have toggle now button AND "when PB" check box to set/reset view when PBing
#random anim shifting
def zbw_offsetAnim(*args):
"""creates offset from first obj sel to last based on the entered offset value"""
def zbw_runOffsetAnim(*args):
#get frame range!!!!!!
#get selection, check that they are tranforms
sel = cmds.ls(sl=True,type="transform")
selSize = int(len(sel))
#for each selection mult the index by the offset value
for i in range(0,selSize):
obj = sel[i]
offsetRaw = cmds.intFieldGrp('zbw_offsetValue', q=True, v=True)
offset = offsetRaw[0]
multFactor = i * offset
#shift the entire anim curve by the offset mult value
cmds.keyframe(obj, edit=True,relative=True,timeChange=multFactor,time=(1,24))
#create UI, get offset value, frame range or all anim
if (cmds.window('zbw_offsetAnimUI', exists=True)):
cmds.deleteUI('zbw_offsetAnimUI', window=True)
cmds.windowPref('zbw_offsetAnimUI', remove=True)
window=cmds.window('zbw_offsetAnimUI', widthHeight=(350,200), title='zbw_offsetAnim')
cmds.columnLayout(cal='center')
cmds.intFieldGrp('zbw_offsetValue', cal=(1,'left'), label='frequency(frames)', value1=5)
#CREATE FRAME RANGE AREA (WHICH FRAMES ARE WE DOING?)
#WHEN THAT HAPPENS, WHAT DO WE DO WITH THE FRAMES AFTER THAT? (PROBABLY NOTHING. . . LET USER WORRY ABOUT IT)
#checkbox for random freq (to give a random amount to offset each object)
#cmds.checkBoxGrp('zbw_animNoiseRandom', cal=(1,'left'), cw=(1, 175),label='random frequency on', value1=0, cc=zbw_animNoiseRandom)
cmds.button('zbw_offsetAnimGo', label='offset!', width=75, command=zbw_runOffsetAnim)
cmds.showWindow(window)
#clean up keys
def control(type="none", *args):
"""gets teh name from the button pushed and the axis from the radio button group"""
axisRaw = cmds.radioButtonGrp(widgets["ctrlAxisRBG"], q=True, sl=True)
if axisRaw == 1:
axis = "x"
if axisRaw == 2:
axis = "y"
if axisRaw == 3:
axis = "z"
rig.createControl(name = "Ctrl", type = type, axis = axis, color = "yellow")
def set_parent_object(tfbg, *args):
"""
gets selection and puts it in the given text field button grp
:param tfbg: the key for widget dict for the textFieldButtonGrp
:param args:
:return:
"""
ctrl = None
sel = cmds.ls(sl=True, type="transform", l=True)
if sel and (len(sel) == 1):
ctrl = sel[0]
if ctrl:
cmds.textFieldButtonGrp(widgets[tfbg], e=True, tx=ctrl)
def deformer_check(obj, *args):
"""
check if there are other deformers on the obj
:param args:
:return:
"""
deformers = rig.get_deformers(obj)
if deformers:
cmds.confirmDialog(title='Deformer Alert!',
message='Found some deformers on {0}.\nYou may want to put the softmod\n early in the '
'input list\n or check "front of chain"'.format(obj),
button=['OK'], defaultButton='OK', cancelButton='OK', dismissString='OK')
def import_anim_UI():
width = 400
if cmds.window("impAnimWin", exists=True):
cmds.deleteUI("impAnimWin")
widgets["win"] = cmds.window("impAnimWin", t="Import anim files", w=width, h=400, rtf=True)
# widgets["clo"] = cmds.columnLayout()
widgets["mainTLO"] = cmds.tabLayout()
widgets["impCLO"] = cmds.columnLayout("Import Anim")
cmds.text("1. choose the folder where your anim clips live,\n2. select the objs in scene to apply to\n3. 'random' will start anim in frame range\n4. select anim clips from list to randomly apply to objs\n5. press button to apply",al="left")
cmds.separator(h=10)
widgets["impPathTFG"] = cmds.textFieldButtonGrp(l="Anim Path:", bl="<<<", cal = ([1, "left"], [2, "left"], [3, "right"]), cw=([1, 75], [2, 275], [3, 40]), bc=partial(get_path, "import", "impPathTFG"), cc=populate_tsl)
widgets["randRBG"] = cmds.radioButtonGrp(l="Insert Placement:", nrb=2, l1="Random Start", l2="At current Frame", sl=1, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,100], [2, 100], [3, 100]), cc=partial(toggle_enable, "randRBG", "rangeIFG"))
widgets["rangeIFG"] = cmds.intFieldGrp(l="Random Start Range:", nf=2, v1=0, v2=100, cw=([1, 120], [2, 50], [3, 50]), cal=([1, "left"], [2, "left"], [3, "left"]))
widgets["delCBG"] = cmds.checkBoxGrp(l="Delete subsequent keys?", v1=True, cal=([1, "left"], [2, "left"]), cw=([1, 130], [2, 20]))
cmds.separator(h=10)
widgets["animTSL"] = cmds.textScrollList(w=400, h=150, allowMultiSelection=True)
cmds.separator(h=10)
widgets["importBut"] = cmds.button(l="Import random anim from selection", h=40, w=width, bgc=(.5, .8, .5), c=import_animation)
cmds.setParent(widgets["mainTLO"])
widgets["expCLO"] = cmds.columnLayout("Export Anim")
cmds.text("1. Select the obj 2. choose a path and name the anim\n3. choose range and hierarchy 4. press button!", al="left")
cmds.separator(h=10)
widgets["expPathTFG"] = cmds.textFieldButtonGrp(l="Export Path:", bl="<<<", cal = ([1, "left"], [2, "left"], [3, "right"]), cw=([1, 75], [2, 275], [3, 40]), bc=partial(get_path, "export", "expPathTFG"))
widgets["nameTFG"] = cmds.textFieldGrp(l="Animation Name:", cw=([1, 100], [2, 250]), cal=([1, "left"], [2, "left"]))
widgets["selRBG"] = cmds.radioButtonGrp(l="Hierarchy:", nrb=2, l1="Selection Only", l2="Below", sl=2, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,75], [2, 100], [3, 100]))
widgets["expRngRBG"] = cmds.radioButtonGrp(l="Time Range:", nrb=2, l1="Start_End", l2="All", sl=2, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,75], [2, 100], [3, 100]), cc=partial(toggle_enable, "expRngRBG", "expRngIFG"))
widgets["expRngIFG"] = cmds.intFieldGrp(nf=2, en=False, l="Start_End", v1=1, v2=10, cal=([1, "left"], [2,"left"], [3,"left"]), cw=([1,75], [2, 100], [3, 100]))
cmds.separator(h=10)
widgets["exportBut"] = cmds.button(l="Export anim from selection", h=40, w=width, bgc=(.5, .8, .5), c=export_animation)
cmds.window(widgets["win"], e=True, w=5, h=5, rtf=True)
cmds.showWindow(widgets["win"])
def toggle_enable(currWidget, toggleWidget, *args):
"""toggles on/off the enabled attr of int field toggleWidget. Currwidget is the radio button grp we look at to get state"""
onOff = cmds.radioButtonGrp(widgets[currWidget], q=True, sl=True)
if onOff == 1:
cmds.intFieldGrp(widgets[toggleWidget], e=True, en=1)
else:
cmds.intFieldGrp(widgets[toggleWidget], e=True, en=0)
def wireRigUI (*args):
if cmds.window("wireRigWin", exists = True):
cmds.deleteUI("wireRigWin")
widgets["win"] = cmds.window("wireRigWin", t="zbw_wireRig", w=300, h=250)
widgets["mainCLO"] = cmds.columnLayout()
widgets["topFLO"] = cmds.frameLayout(l="Convert Poly Edges",cll=True, cl=True)
widgets["topCLO"] = cmds.columnLayout()
widgets["convertBut"] = cmds.button(l="convert selected poly edge to curve", w=300, bgc = (.8,.8,0), c=convertEdge)
cmds.separator(h=20, style="single")
widgets["reverseBut"] = cmds.button(l="reverse direction of selected curve", w=300, bgc = (.8,.5,0), c=reverseCrv)
cmds.setParent(widgets["mainCLO"])
widgets["botFLO"] = cmds.frameLayout(l="Create Wire Rig", cll=True)
widgets["botCLO"] = cmds.columnLayout()
widgets["numCtrlIFG"] = cmds.intFieldGrp(l="Number of Ctrls:", v1=5, cal=[(1, "left"), (2, "left")], cw=[(1, 150),(3, 75)])
widgets["hierCBG"] = cmds.checkBoxGrp(ncb=1, l1 = "Put Ctrls in hierarchy?", v1=True, en=True)
widgets["nameTFG"] = cmds.textFieldGrp(l="Wire Rig Name:", w=300, tx="wireCtrl1", cal=[(1, "left")])
widgets["scaleFFG"] = cmds.floatFieldGrp(l="Control scale:", v1=1.0, cal=[(1, "left"), (2, "left")], cw=[(1, 150),(3, 75)])
cmds.separator(h=30, style="single")
widgets["textText"] = cmds.text("Select geo, then curve, then button below", al="center")
widgets["rigBut"] = cmds.button(l="Create Wire Rig", w= 300, h=40, bgc= (0, .5, 0), c=createWireDef)
cmds.showWindow(widgets["win"])
#option to pull curve from edges
def transformBufferUI(*args):
if cmds.window("tbWin", exists=True):
cmds.deleteUI("tbWin")
widgets["win"] = cmds.window("tbWin", t="zbw_tranformBuffer", s=False, w=200)
widgets["mainCLO"] = cmds.columnLayout(w=200)
######## ------ checkbox to enable/disable these. . . .
widgets["trnFFG"] = cmds.floatFieldGrp(l="Trns: ", nf=3, cw=[(1, 40), (2, 50), (3, 50), (4,50)], cal = [(1, "left"), (2, "left"), (3, "left"), (4,"left")])
widgets["rotFFG"] = cmds.floatFieldGrp(l="Rot: ", nf=3, cw=[(1, 40), (2, 50), (3, 50), (4,50)], cal = [(1, "left"), (2, "left"), (3, "left"), (4,"left")])
widgets["sclFFG"] = cmds.floatFieldGrp(l="Scl: ", nf=3, cw=[(1,40), (2, 50), (3, 50), (4,50)],cal = [(1, "left"), (2, "left"), (3, "left"), (4,"left")])
cmds.separator(h=10)
widgets["transCBG"] = cmds.checkBoxGrp(ncb=3, la3 = ("Trns", "Rot", "Scl"), va3=(1, 1, 1), cal=[(1, "left"), (2, "left"), (3, "left")], cw = [(1, 50), (2, 50), (3, 50)])
cmds.separator(h=10)
widgets["butFLO"] = cmds.formLayout(w=200, h=50)
widgets["getBut"] = cmds.button(l="Catch\nValues", bgc = (.8, .5, .5), h=50, w=100, c=getValues)
widgets["setBut"] = cmds.button(l="Set\nValues", bgc = (.5, .8,.5), h=50, w=100, c=setValues)
cmds.formLayout(widgets["butFLO"], e=True, af = [
(widgets["getBut"], "top", 0),
(widgets["getBut"], "left", 0),
(widgets["setBut"], "top", 0),
(widgets["setBut"], "left", 100)
])
cmds.window(widgets["win"], e=True, w=200, h=100)
cmds.showWindow(widgets["win"])