pyside for maya ———多种弹窗调用

//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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值