2015-09-10 44 views
0

我想弄清楚某種方式來「獲取」調用函數的GUI組件。通過這種方式,我可以將代碼進一步整合到可執行類似任務的組件的可重用部分中。我需要一種方法來在Maya的GUI命令以及Qt中執行此操作。我想我正在尋找的是一個像「初始」,「文件」,「」等一般python技巧,如果沒有一般python的方式來做到這一點,任何瑪雅人/ Qt特定的技巧也是受歡迎的。如何獲取調用函數的Maya/Qt GUI組件?

下面是一些任意的僞代碼,以便更好地解釋我在尋找:

field1 = floatSlider(changeCommand=myFunction) 
field2 = colorSlider(changeCommand=myFunction) 

def myFunction(*args): 
    get the component that called this function 

    if the component is a floatSlider 
     get component's value 
     do the rest of the stuff 

    elif the component is a colorSlider 
     get component's color 
     do the rest of the stuff 
+0

在Qt中,有信號和插槽,並有一個QObject.sender()方法返回調用GUI元素。 – Gombat

回答

1

從Gombat的評論擴大,這裏有一個滑塊和紡紗器的工作如何獲得一個泛型函數的例子控制:

from PySide import QtGui, QtCore 

class Window(QtGui.QWidget): 
    def __init__(self, parent = None): 
     super(Window, self).__init__(parent) 

     # Create a slider 
     self.floatSlider = QtGui.QSlider() 
     self.floatSlider.setObjectName('floatSlider') 
     self.floatSlider.valueChanged.connect(self.myFunction) 

     # Create a spinbox 
     self.colorSpinBox = QtGui.QSpinBox() 
     self.colorSpinBox.setObjectName('colorSlider') 
     self.colorSpinBox.valueChanged.connect(self.myFunction) 

     # Create widget's layout 
     mainLayout = QtGui.QHBoxLayout() 
     mainLayout.addWidget(self.floatSlider) 
     mainLayout.addWidget(self.colorSpinBox) 
     self.setLayout(mainLayout) 

     # Resize widget and show it 
     self.resize(300, 300) 
     self.show() 

    def myFunction(self): 
     # Getting current control calling this function with self.sender() 
     # Print out the control's internal name, its type, and its value 
     print "{0}: type {1}, value {2}".format(self.sender().objectName(), type(self.sender()), self.sender().value()) 

win = Window() 

我不知道該怎麼控制你想colorSlider(我不認爲PySide具有相同的滑塊作爲一個在Maya中,您可能需要定製或使用QColorDialog)。但是這應該給你一個關於如何去做的粗略想法。