def convert(mguiName): """ From the name of a Maya UI element of any type to pointer, and wrap the pointer into a python QObject :param mguiName: Maya UI Name :type mguiName: string :return: QWidget or subclass instance :rtype: QtGui.QWidget Thanks to Nathan Horne """ # Get pointer ptr = MQtUtil.findControl(mguiName) if ptr is None: ptr = MQtUtil.findLayout(mguiName) if ptr is None: ptr = MQtUtil.findMenuItem(mguiName) if ptr is None: return None # Find corresponding class qObj = wrapInstance(long(ptr), QtCore.QObject) metaObj = qObj.metaObject() cls = metaObj.className() superCls = metaObj.superClass().className() if hasattr(QtGui, cls): base = getattr(QtGui, cls) elif hasattr(QtGui, superCls): base = getattr(QtGui, superCls) else: base = QtGui.QWidget return wrapInstance(long(ptr), base)
def convert(mguiName): """ From the name of a Maya UI element of any type to pointer, and wrap the pointer into a python QObject :param mguiName: Maya UI Name :type mguiName: string :return: QWidget or subclass instance :rtype: QtWidgets.QWidget Thanks to Nathan Horne """ # Get pointer ptr = MQtUtil.findControl(mguiName) if ptr is None: ptr = MQtUtil.findLayout(mguiName) if ptr is None: ptr = MQtUtil.findMenuItem(mguiName) if ptr is None: return None # Find corresponding class qObj = QtCompat.wrapInstance(long(ptr), QtCore.QObject) metaObj = qObj.metaObject() cls = metaObj.className() superCls = metaObj.superClass().className() if hasattr(QtWidgets, cls): base = getattr(QtWidgets, cls) elif hasattr(QtWidgets, superCls): base = getattr(QtWidgets, superCls) else: base = QtWidgets.QWidget return QtCompat.wrapInstance(long(ptr), base)
def active_panel_widget(): from maya import cmds from maya.OpenMayaUI import MQtUtil try: from shiboken import wrapInstance except ImportError: from shiboken2 import wrapInstance panel = cmds.getPanel(withFocus=True) widget = wrapInstance(long(MQtUtil.findControl(panel)), QtWidgets.QWidget) return MayaWidget(panel, widget)
def get_q_object(element_name): """ :param element_name: str(<maya_element_name>) :return: QObject """ pointer = MQtUtil.findControl(element_name) if not pointer: pointer = MQtUtil.findLayout(element_name) if not pointer: pointer = MQtUtil.findMenuItem(element_name) return shiboken.wrapInstance(pointer, QtCore.QObject)
def wrap(): i = 1 while i: try: se_edit = wrapInstance(long(MQtUtil.findControl('cmdScrollFieldReporter%i' % i)), QTextEdit) break except TypeError: i += 1 try: syntax_highlighter.deleteLater() except: pass syntax_highlighter = SH(se_edit)
def get_shader(self, shader): """Wrap and return a maya material swatch as a QWidget""" port = cmds.swatchDisplayPort(sn=shader, widthHeight=[32, 32], width=32, height=32, renderSize=32, backgroundColor=[0, 0, 0]) ptr = MQtUtil.findControl(port) qport = shiboken2.wrapInstance(long(ptr), QtWidgets.QWidget) qport.setFixedSize(32, 32) return qport
def getChildWin(title, widgType=QtWidgets.QWidget): for w in getMayaMainWindow().children(): if w.isWidgetType() and w.windowTitle() == title: return w else: ptr = MQtUtil.findControl(title) if not ptr: ptr = MQtUtil.findWindow(title) if not ptr: ptr = MQtUtil.findLayout(title) if not ptr: return return shiboken2.wrapInstance(long(ptr), widgType)
def __init__(self, workspace_control_name=None): super(MyDockableButton, self).__init__() self.setWindowTitle("Dockable Window") self.setText("My Button") if workspace_control_name: workspace_control_ptr = long( MQtUtil.findControl(workspace_control_name)) widget_ptr = long(getCppPointer(self)[0]) MQtUtil.addWidgetToMayaLayout(widget_ptr, workspace_control_ptr)
def setupMannequinUI(): """Sets up the side panel UI for the Mannequin plugin.""" currentContext = cmds.currentCtx() influenceObjectsStr = cmds.mannequinContext(currentContext, q=True, io=True) ioTokens = influenceObjectsStr.split(" ") ioDagPaths = ioTokens[::2] ioAvailableStyles = ioTokens[1::2] mannequinDockPtr = MQtUtil.findLayout("mannequinPaletteDock") mannequinDock = wrapInstance(long(mannequinDockPtr), QWidget) mannequinDock.setMinimumWidth(300) mannequinLayoutPtr = MQtUtil.findLayout("mannequinPaletteLayout") mannequinLayout = wrapInstance(long(mannequinLayoutPtr), QWidget) mannequinSearchPtr = MQtUtil.findControl("mannequinSearchField") mannequinSearch = wrapInstance(long(mannequinSearchPtr), QLineEdit) uiFile = QFile(os.path.join(os.path.dirname(__file__), "mannequin.ui")) uiFile.open(QFile.ReadOnly) gui = mannequinToolPanel.loader.load(uiFile, parentWidget=mannequinLayout) uiFile.close() selList = om.MSelectionList() for obj in ioDagPaths: selList.add(obj) joints = [] for i in range(selList.length()): dagPath = selList.getDagPath(i) dependNode = selList.getDependNode(i) styles = ioAvailableStyles[i] joints.append(JointInfo(dagPath, dependNode, styles)) # Alphabetize joints by full DAG path; should sort slightly better. joints = sorted(joints, key=lambda j: j.dagPath.fullPathName()) prefixTrim = commonPrefix(joints) mannequinToolPanel.reset(mannequinLayout, gui, mannequinSearch, prefixTrim) jointDisplays = organizeJoints(joints) for jointDisplay in jointDisplays: mannequinToolPanel.layoutJointGroup(jointDisplay) mannequinToolPanel.finishLayout()
def __init__(self): super(MyDockableButtonStatic, self).__init__() self.setObjectName(self.UI_NAME) self.setWindowTitle("Dockable Window") self.setText('My Button') workspace_control_name = "{0}WorkspaceControl".format(self.UI_NAME) if cmds.workspaceControl(workspace_control_name, q=True, exists=True): workspace_control_ptr = long( MQtUtil.findControl(workspace_control_name)) widget_ptr = long(getCppPointer(self)[0]) MQtUtil.addWidgetToMayaLayout(widget_ptr, workspace_control_ptr)
def dp_makePySideUI(ctrlName, myStyle): # thanks to Nathan Horne ctrlName = long(MQtUtil.findControl(ctrlName)) qObj = wrapInstance(ctrlName, QtCore.QObject) metaObj = qObj.metaObject() cls = metaObj.className() superCls = metaObj.superClass().className() if hasattr(QtGui, cls): base = getattr(QtGui, cls) elif hasattr(QtGui, superCls): base = getattr(QtGui, superCls) else: base = QtGui.QWidget uiPySide = wrapInstance(ctrlName, base) uiPySide.setStyleSheet(myStyle)
def dpaf_makePySideUI(self, ctrlName, myStyle): # thanks to Nathan Horne ctrlName = long(MQtUtil.findControl(ctrlName)) qObj = wrapInstance(ctrlName, QtCore.QObject) metaObj = qObj.metaObject() cls = metaObj.className() superCls = metaObj.superClass().className() if hasattr(QtGui, cls): base = getattr(QtGui, cls) elif hasattr(QtGui, superCls): base = getattr(QtGui, superCls) else: base = QtGui.QWidget uiPySide = wrapInstance(ctrlName, base) uiPySide.setStyleSheet(myStyle)
def __init__(self, name='scriptEditor', parent=None, textChangeHandler=None, **kwargs): super(ScriptEditorWidget, self).__init__(parent) self.setObjectName(name) self.__layout = QtWidgets.QVBoxLayout(self) self.__layout.setContentsMargins(0,0,0,0) self.mayaEditor = cmds.cmdScrollFieldExecuter( st='python', searchWraps=True, filterKeyPress=self.__keyPress, cco=False, opc=False, sth=False, # acb=False, **kwargs) self.__txt = '' p = MQtUtil.findControl(self.mayaEditor) self.editor = p and wrapInstance(long(p), QtWidgets.QTextEdit) if self.editor: self.editor.setParent(self) if textChangeHandler: self.__textChangeHandler = textChangeHandler self.editor.installEventFilter(self) #self.editor.textChanged.connect(self.__textChanged) self.__layout.addWidget(self.editor)
def hook_text_changed_event(maya_text_field, event): ptr = MQtUtil.findControl(maya_text_field) qt_wrapper = wrapInstance(long(ptr), QTextEdit) signal = QtCore.SIGNAL("textChanged(const QString&)") qt_wrapper.connect(signal, event) return qt_wrapper
def hook_key_changed_event(maya_text_field, event): ptr = MQtUtil.findControl(maya_text_field) qt_wrapper = wrapInstance(long(ptr), QTextEdit) signal = QtCore.SIGNAL("keyReleaseEvent(QKeyEvent * ev)") qt_wrapper.connect(signal, event) return qt_wrapper
# Create an instance of the button and display it. # button = MyButton() button.show() # A valid Maya control name has been automatically assigned # to the button. # buttonName = button.objectName() print('# ' + buttonName) # MyButton_368fe1d8-5bc3-4942-a1bf-597d1b5d3b83 # Losing our only reference to the button does not cause it to be # destroyed. # myButton = None # We can use the button's name to find it as a Maya control. # from maya.OpenMayaUI import MQtUtil from shiboken2 import wrapInstance ptr = MQtUtil.findControl(buttonName) foundControl = wrapInstance(long(ptr), QPushButton) # Print out the button's text. # print('# ' + foundControl.text()) # Push Me
def _find_widget_ptr(widget): ptr = (MQtUtil.findControl(widget) or MQtUtil.findLayout(widget) or MQtUtil.findMenuItem(widget)) return ptr