如何获取正在调用函数的 Maya/Qt GUI 组件?
How to get the Maya/Qt GUI component that is calling a function?
我正在尝试找到一种方法 "get" 调用函数的 GUI 组件。通过这种方式,我可以进一步将我的代码合并为执行类似任务的组件的可重用部分。我需要一种在 Maya 和 Qt 的 GUI 命令中执行此操作的方法。我想我正在寻找的是一个通用的 python 技巧,例如“init”、“file”、“main",等等。如果没有通用的 python 方法,也欢迎使用任何 Maya/Qt 特定技巧。
这里有一些伪代码可以更好地解释我要找的东西:
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
根据 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
)。但这应该让您大致了解如何去做。
我正在尝试找到一种方法 "get" 调用函数的 GUI 组件。通过这种方式,我可以进一步将我的代码合并为执行类似任务的组件的可重用部分。我需要一种在 Maya 和 Qt 的 GUI 命令中执行此操作的方法。我想我正在寻找的是一个通用的 python 技巧,例如“init”、“file”、“main",等等。如果没有通用的 python 方法,也欢迎使用任何 Maya/Qt 特定技巧。
这里有一些伪代码可以更好地解释我要找的东西:
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
根据 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
)。但这应该让您大致了解如何去做。