# -*- coding: utf-8 -*-
"""
Author: Virgil
Date: 2020/5/23 13:18
"""
from PySide2 import QtCore
from PySide2 import QtGui
from PySide2 import QtWidgets
from shiboken2 import wrapInstance
from functools import partial
import maya.OpenMayaUI as omui
import maya.cmds as cmds
import maya.mel as mel
def maya_main_window():
"""
Return the Maya main window widget as a Python object
"""
main_window_ptr = omui.MQtUtil.mainWindow()
return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
class CustomColorButton(QtWidgets.QWidget):
color_changed = QtCore.Signal(QtGui.QColor)
def __init__(self, color=QtCore.Qt.white, parent=None):
super(CustomColorButton, self).__init__(parent)
self.setObjectName("CustomColorButton")
self.create_control()
self.set_size(250, 14)
self.set_color(color)
def create_control(self):
""" 1. Create the colorSliderGrp"""
window = cmds.window()
color_slider_name = cmds.colorSliderGrp()
""" 2. Find the colorSliderGrp widget"""
self._color_slider_obj = omui.MQtUtil.findControl(color_slider_name)
if self._color_slider_obj:
self._color_slider_widget = wrapInstance(long(self._color_slider_obj), QtWidgets.QWidget)
""" 3. Reparent the colorSliderGrp widget to this widget"""
main_layout = QtWidgets.QVBoxLayout(self)
main_layout.setObjectName("main_layout")
main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.addWidget(self._color_slider_widget)
""" 5. Identify/store the colorSliderGrp's child widgets (and hide if necessary)"""
# children = self._color_slider_widget.children()
# for child in children:
# print(child)
# print(child.objectName())
# print("--------------------")
self._slider_widget = self._color_slider_widget.findChild(QtWidgets.QWidget, "slider")
# if self._slider_widget:
# self._slider_widget.hide()
self._color_widget = self._color_slider_widget.findChild(QtWidgets.QWidget, "port")
cmds.colorSliderGrp(self.get_full_name(), edit=True, changeCommand=partial(self.on_color_changed))
cmds.deleteUI(window, window=True)
def get_full_name(self):
return omui.MQtUtil.fullName(long(self._color_slider_obj))
def set_size(self, width, height):
self._color_slider_widget.setFixedWidth(width)
self._color_widget.setFixedHeight(height)
def set_color(self, color):
color = QtGui.QColor(color)
cmds.colorSliderGrp(self.get_full_name(), edit=True, rgbValue=(color.redF(), color.greenF(), color.blueF()))
self.on_color_changed()
def get_color(self):
# color = cmds.colorSliderGrp(self._color_slider_widget.objectName(), query=True, rgbValue=True)
color = cmds.colorSliderGrp(self.get_full_name(), query=True, rgbValue=True)
color = QtGui.QColor(color[0] * 255, color[1] * 255, color[2] * 255)
return color
def on_color_changed(self, *args):
self.color_changed.emit(self.get_color())
class CustomDialog(QtWidgets.QDialog):
WINDOW_TITLE = "Embedding Maya Controls"
dlg_instance = None
def __init__(self, parent=maya_main_window()):
super(CustomDialog, self).__init__(parent)
self.setWindowTitle(self.WINDOW_TITLE)
self.setObjectName("EmbeddingMayaControls")
self.setMinimumSize(200, 100)
self.setWindowFlags(self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint)
self.foreground_color = QtGui.QColor(QtCore.Qt.white)
self.background_color = QtGui.QColor(QtCore.Qt.black)
self.create_widgets()
self.create_layout()
self.create_connections()
def create_widgets(self):
self.foreground_color_bttn = CustomColorButton(QtCore.Qt.white)
self.background_color_bttn = CustomColorButton(QtCore.Qt.black)
self.close_bttn = QtWidgets.QPushButton("Close")
def create_layout(self):
color_layout = QtWidgets.QFormLayout()
color_layout.addRow("Foreground:", self.foreground_color_bttn)
color_layout.addRow("Background:", self.background_color_bttn)
color_grp = QtWidgets.QGroupBox("Color Options")
color_grp.setLayout(color_layout)
bttn_layout = QtWidgets.QHBoxLayout()
bttn_layout.setSpacing(2)
bttn_layout.addStretch()
bttn_layout.addWidget(self.close_bttn)
main_layout = QtWidgets.QVBoxLayout(self)
main_layout.setContentsMargins(5, 5, 5, 5)
main_layout.addWidget(color_grp)
main_layout.addStretch()
main_layout.addLayout(bttn_layout)
def create_connections(self):
# self.foreground_color_bttn.color_changed.connect(self.print_colors)
# self.background_color_bttn.color_changed.connect(self.print_colors)
self.foreground_color_bttn.color_changed.connect(partial(self.print_colors, bttn="Foreground"))
self.background_color_bttn.color_changed.connect(partial(self.print_colors, bttn="Background"))
self.close_bttn.clicked.connect(self.close)
# def print_colors(self):
# fg_color = self.foreground_color_bttn.get_color()
# bg_color = self.background_color_bttn.get_color()
#
# print("Foreground Color: [{0}, {1}, {2}]".format(fg_color.red(), fg_color.green(), fg_color.blue()))
# print("Background Color: [{0}, {1}, {2}]".format(bg_color.red(), bg_color.green(), bg_color.blue()))
def print_colors(self, color, bttn):
print("{0} Color: [{1}, {2}, {3}]".format(bttn, color.red(), color.green(), color.blue()))
def showWindow():
global dialog
try:
dialog.close()
dialog.deleteLater()
except:
pass
dialog = CustomDialog()
dialog.show()
if __name__ == "__main__":
try:
dialog.close()
dialog.deleteLater()
except:
pass
dialog = CustomDialog()
dialog.show()
Maya控件內嵌到PySide2(colorSliderGrp)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.