簡體   English   中英

在類外調用變量

[英]Calling a variable outside a class

如何獲取在類內定義的intSliderGrp的值並將其用於所述類外的函數?

我試圖將我的主 UI 全部放在一個類中,這樣我就可以在 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()

這是我第一次使用類,所以我仍在努力了解它們的工作原理和正確使用方法。

目前,您沒有利用類的優勢在 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM