Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类外调用变量_Python_Maya - Fatal编程技术网

Python 在类外调用变量

Python 在类外调用变量,python,maya,Python,Maya,如何获取类内定义的intSliderGrp的值,并将其用于所述类外的函数 我试图将我的主UI全部放在一个类中,这样我就可以在maya中调用它,但我需要在滑块上设置值来修改类UI之外的函数: import maya.cmds as cmds def setSubdivision(*args): obj = cmds.ls(sl = True) asubd = cmds.intSliderGrp(sliderSet, query = True , value = True)

如何获取类内定义的
intSliderGrp
的值,并将其用于所述类外的函数

我试图将我的主UI全部放在一个类中,这样我就可以在maya中调用它,但我需要在滑块上设置值来修改类UI之外的函数:

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()

这是我第一次使用类,因此我仍在努力了解它们的工作原理和正确使用。

目前,在Maya中创建UI时没有使用类的优势。最大的优点是可以将所有内容封装在这个类中,而不需要任何外部函数或全局变量。如果您尝试这种方法,您的问题就会消失:

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()

目前,在Maya中创建UI时不使用类的优势。最大的优点是可以将所有内容封装在这个类中,而不需要任何外部函数或全局变量。如果您尝试这种方法,您的问题就会消失:

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()

非常感谢。这是有道理的,我用剩下的代码尝试了这一点,效果非常好。我仍在试图找出类和“自我”的不同用法。但这给了我一个整体的想法。非常感谢。非常感谢。这是有道理的,我用剩下的代码尝试了这一点,效果非常好。我仍在试图找出类和“自我”的不同用法。但这给了我一个整体的想法。非常感谢。