//Warning
//Clolor:获取颜色选取窗口并返回颜色
//Floder:创建初始路径,并保留上次记录
//Custom:强制选择【result = QtWidgets.QMessageBox.question(self, “窗口名”, “这是一个对比”)】
# -*- coding: utf-8 -*-
from PySide2 import QtCore
from PySide2 import QtWidgets, QtGui
# 获取主窗口调用模块
from shiboken2 import wrapInstance
import maya.OpenMayaUI as omui
import maya.cmds as cmds
# 返回maya的主窗口小部件作为python对象>>>[样板代码]
def maya_main_window():
# 获取主窗口
main_window_ptr = omui.MQtUtil.mainWindow()
return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)
class CustomDialog(QtWidgets.QDialog):
# parent:将ui窗口定义给maya的主窗口
def __init__(self, parent=maya_main_window()):
super(CustomDialog, self).__init__(parent)
self.setWindowTitle("Test Dialog")
self.setMinimumWidth(200)
self.setMinimumHeight(90)
# 使用排他或按位运算符删除主窗口x前面的?>>>[这个只在Windows系统中会出现]
self.setWindowFlags(self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint)
self.create_widgets()
self.create_custom_layouts()
self.create_connections()
# 创建按钮
def create_widgets(self):
self.lineedit = QtWidgets.QLineEdit()
self.ok_btn = QtWidgets.QPushButton("ok")
# 创建布局
def create_custom_layouts(self):
wdg_layout = QtWidgets.QHBoxLayout()
wdg_layout.addWidget(QtWidgets.QLabel("name:"))
wdg_layout.addWidget(self.lineedit)
btn_layout = QtWidgets.QHBoxLayout()
btn_layout.addStretch()
btn_layout.addWidget(self.ok_btn)
main_layout = QtWidgets.QVBoxLayout(self)
main_layout.addLayout(wdg_layout)
main_layout.addLayout(btn_layout)
# 创建连接
def create_connections(self):
# accept为QDialog内置方法,点击时关闭
self.ok_btn.clicked.connect(self.accept)
def get_text(self):
return self.lineedit.text()
class TestDialog(QtWidgets.QDialog):
""" a simple dialog for getting a user's name"""
def __init__(self, parent=maya_main_window()):
super(TestDialog, self).__init__(parent)
self.setWindowTitle("test dialog")
self.setWindowFlags(self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint)
# 获取maya初始路径
self.initial_directory = cmds.internalVar(userPrefDir=True)
# 创建初始值并定义函数
self.initial_color = QtGui.QColor(255, 0, 0)
self.create_widgets()
self.create_layout()
self.create_connections()
def create_widgets(self):
self.warning_btn = QtWidgets.QPushButton("Warning")
self.folder_select_btn = QtWidgets.QPushButton("Folder")
self.color_select_btn = QtWidgets.QPushButton("Color")
self.custom_btn = QtWidgets.QPushButton("Custom")
def create_layout(self):
button_layout = QtWidgets.QHBoxLayout(self)
button_layout.addWidget(self.warning_btn)
button_layout.addWidget(self.folder_select_btn)
button_layout.addWidget(self.color_select_btn)
button_layout.addWidget(self.custom_btn)
def create_connections(self):
self.warning_btn.clicked.connect(self.show_warning_dialog)
self.folder_select_btn.clicked.connect(self.show_folder_select)
self.color_select_btn.clicked.connect(self.show_color_select)
self.custom_btn.clicked.connect(self.show_custom_dialog)
def show_warning_dialog(self):
QtWidgets.QMessageBox.warning(self, "object not found", "camera 'shotcam' not found.")
def show_folder_select(self):
# 创建文件初始路径
new_directory = QtWidgets.QFileDialog.getExistingDirectory(None, "select folder", self.initial_directory)
# 保留选择历史记录
if new_directory:
self.initial_directory = new_directory
print("select folder: {}".format(new_directory))
def show_color_select(self):
self.initial_color = QtWidgets.QColorDialog.getColor(self.initial_color, self)
print("red:{} green:{} blue:{}".format(self.initial_color.red(),
self.initial_color.green(),
self.initial_color.blue()))
def show_custom_dialog(self):
custom_dialog = CustomDialog()
# exec_()方法:启动事件循环/阻塞用户交互/返回对话框的关闭状态
result = custom_dialog.exec_()
if result == QtWidgets.QDialog.Accepted:
print("name:{}".format(custom_dialog.get_text()))
if __name__ == "__main__":
try:
test_dialog.close() # pylint: disable=E0601
test_dialog.deleteLater()
except:
pass
test_dialog = TestDialog()
test_dialog.show()