在 class 之外调用变量
Calling a variable outside a class
如何获取 class 中定义的 intSliderGrp
的值并将其用于所述 class 之外的函数?
我试图将我的主要 UI 全部放在 class 中,这样我就可以在 maya 中调用它,但我需要在滑块上设置值来修改classUI:
import maya.cmds as cmds
def setSubdivision(*args):
obj = cmds.ls(sl = True)
asubd = cmds.intSliderGrp(sliderSet, query = True , value = True)
for i in obj:
cmds.setAttr('%s.aiSubdivIterations' %i, int(asubd))
class subdivisionUI():
windowName = "ArnoldSubdivisionWindow"
def show(self):
if cmds.window(self.windowName, query = True, exists = True, width = 150):
cmds.deleteUI(self.windowName)
cmds.window(self.windowName)
mainColumn = cmds.columnLayout(adjustableColumn = True)
cmds.text(l='Set subdivisions to selected objects', al = 'center')
column2 = cmds.rowLayout(numberOfColumns = 2, adjustableColumn=2, columnAlign=(1, 'right'))
sliderSet = cmds.intSliderGrp(l = "Subdivisions", s =1, min = 0, max = 20, field = True)
b = cmds.button(l = 'Set')
cmds.button(b, e = True , command = setSubdivision, width = 50 )
cmds.showWindow()
subdivisionUI().show()
这是我第一次使用 classes,所以我仍在努力了解它们的工作原理和正确使用方法。
目前您没有使用 classes 的优势在 Maya 中创建 UI。最大的优点是您可以将所有内容封装在这个 class 中,而不需要任何外部函数或全局变量。如果您尝试这种方法,您的问题就会消失:
import maya.cmds as cmds
class subdivisionUI():
windowName = "ArnoldSubdivisionWindow"
def __init__(self):
if cmds.window(self.windowName, query = True, exists = True, width = 150):
cmds.deleteUI(self.windowName)
self.window = cmds.window(self.windowName)
mainColumn = cmds.columnLayout(adjustableColumn = True)
cmds.text(l='Set subdivisions to selected objects', al = 'center')
column2 = cmds.rowLayout(numberOfColumns = 2, adjustableColumn=2, columnAlign=(1, 'right'))
self.sliderSet = cmds.intSliderGrp(l = "Subdivisions", s =1, min = 0, max = 20, field = True)
b = cmds.button(l = 'Set')
cmds.button(b, e = True , command = self.setSubdivision, width = 50 )
def setSubdivision(self, *args):
obj = cmds.ls(sl = True)
asubd = cmds.intSliderGrp(self.sliderSet, query = True , value = True)
for i in obj:
cmds.setAttr('%s.aiSubdivIterations' %i, int(asubd))
def show(self):
cmds.showWindow(self.window)
subdivisionUI().show()
如何获取 class 中定义的 intSliderGrp
的值并将其用于所述 class 之外的函数?
我试图将我的主要 UI 全部放在 class 中,这样我就可以在 maya 中调用它,但我需要在滑块上设置值来修改classUI:
import maya.cmds as cmds
def setSubdivision(*args):
obj = cmds.ls(sl = True)
asubd = cmds.intSliderGrp(sliderSet, query = True , value = True)
for i in obj:
cmds.setAttr('%s.aiSubdivIterations' %i, int(asubd))
class subdivisionUI():
windowName = "ArnoldSubdivisionWindow"
def show(self):
if cmds.window(self.windowName, query = True, exists = True, width = 150):
cmds.deleteUI(self.windowName)
cmds.window(self.windowName)
mainColumn = cmds.columnLayout(adjustableColumn = True)
cmds.text(l='Set subdivisions to selected objects', al = 'center')
column2 = cmds.rowLayout(numberOfColumns = 2, adjustableColumn=2, columnAlign=(1, 'right'))
sliderSet = cmds.intSliderGrp(l = "Subdivisions", s =1, min = 0, max = 20, field = True)
b = cmds.button(l = 'Set')
cmds.button(b, e = True , command = setSubdivision, width = 50 )
cmds.showWindow()
subdivisionUI().show()
这是我第一次使用 classes,所以我仍在努力了解它们的工作原理和正确使用方法。
目前您没有使用 classes 的优势在 Maya 中创建 UI。最大的优点是您可以将所有内容封装在这个 class 中,而不需要任何外部函数或全局变量。如果您尝试这种方法,您的问题就会消失:
import maya.cmds as cmds
class subdivisionUI():
windowName = "ArnoldSubdivisionWindow"
def __init__(self):
if cmds.window(self.windowName, query = True, exists = True, width = 150):
cmds.deleteUI(self.windowName)
self.window = cmds.window(self.windowName)
mainColumn = cmds.columnLayout(adjustableColumn = True)
cmds.text(l='Set subdivisions to selected objects', al = 'center')
column2 = cmds.rowLayout(numberOfColumns = 2, adjustableColumn=2, columnAlign=(1, 'right'))
self.sliderSet = cmds.intSliderGrp(l = "Subdivisions", s =1, min = 0, max = 20, field = True)
b = cmds.button(l = 'Set')
cmds.button(b, e = True , command = self.setSubdivision, width = 50 )
def setSubdivision(self, *args):
obj = cmds.ls(sl = True)
asubd = cmds.intSliderGrp(self.sliderSet, query = True , value = True)
for i in obj:
cmds.setAttr('%s.aiSubdivIterations' %i, int(asubd))
def show(self):
cmds.showWindow(self.window)
subdivisionUI().show()