Pyside for maya——窗口的基础创建

uiBase

# -*- coding: utf-8 -*-
from PySide2 import QtCore
from PySide2 import QtWidgets
# 获取主窗口调用模块
from shiboken2 import wrapInstance
import maya.OpenMayaUI as omui


# 返回maya的主窗口小部件作为python对象>>>[样板代码]
def maya_main_window():
    # 获取主窗口
    main_window_ptr = omui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)


class TestDialog(QtWidgets.QDialog):
    # parent:将ui窗口定义给maya的主窗口
    def __init__(self, parent=maya_main_window()):
        super(TestDialog, 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_layouts()
        self.create_connections()

    # 创建按钮
    def create_widgets(self):
        pass

    # 创建布局
    def create_layouts(self):
        pass

    # 创建连接
    def create_connections(self):
        pass


if __name__ == "__main__":
    try:
        test_dialog.close()  # pylint: disable=E0601
        test_dialog.deleteLater()
    except:
        pass

    test_dialog = TestDialog()
    test_dialog.show()

uiTest1

# -*- coding: utf-8 -*-
from PySide2 import QtCore
from PySide2 import QtWidgets
# 获取主窗口调用模块
from shiboken2 import wrapInstance
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
import maya.OpenMayaUI as omui


# 返回maya的主窗口小部件作为python对象>>>[样板代码]
def maya_main_window():
    # 获取主窗口
    main_window_ptr = omui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)


class TestDialog(QtWidgets.QDialog):
    # parent:将ui窗口定义给maya的主窗口
    def __init__(self, parent=maya_main_window()):
        super(TestDialog, self).__init__(parent)

        self.setWindowTitle("Test Dialog")
        self.setMinimumWidth(200)

        # 使用排他或按位运算符删除主窗口x前面的?>>>[这个只在Windows系统中会出现]
        self.setWindowFlags(self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint)

        self.create_widgets()
        self.create_layouts()
        self.create_connections()

    # 创建按钮
    def create_widgets(self):
        # 输入框,勾选框和按钮
        self.lineEdit = QtWidgets.QLineEdit()
        self.lineEdit2 = QtWidgets.QLineEdit()

        self.checkbox1 = QtWidgets.QCheckBox("Checkbox1")
        self.checkbox2 = QtWidgets.QCheckBox("checkbox2")

        self.ok_btn = QtWidgets.QPushButton("OK")
        self.cancel_btn = QtWidgets.QPushButton("Cancel")

        self.combobox = QtWidgets.QComboBox()
        self.combobox.addItems(["ComboBoxItem 1", "ComboBoxItem 2", "ComboBoxItem 3", "ComboBoxItem 4"])

    # 创建布局
    def create_layouts(self):
        # 添加前缀
        form_layout = QtWidgets.QFormLayout()
        form_layout.addRow("ComboBox:", self.combobox)

        form_layout.addRow("Name:", self.lineEdit)
        form_layout.addRow("Name:", self.lineEdit2)
        form_layout.addRow("Hidden:", self.checkbox1)
        form_layout.addRow("Locked:", self.checkbox2)

        button_layout = QtWidgets.QHBoxLayout()
        # 强制按钮跟随拉伸,不产生变形
        button_layout.addStretch()
        button_layout.addWidget(self.ok_btn)
        button_layout.addWidget(self.cancel_btn)

        # Root:垂直布局
        main_layout = QtWidgets.QVBoxLayout(self)
        # 将添加前缀布局添加进垂直布局
        main_layout.addLayout(form_layout)
        # 将水平布局添加进入垂直布局
        main_layout.addLayout(button_layout)

    # 创建连接
    def create_connections(self):
        # 当文本框编辑时,同步更新文本框信号,
        self.lineEdit2.textChanged.connect(self.PrintHelloName)
        # 当文本框被编辑后,连接文本框信号
        self.lineEdit.editingFinished.connect(self.print_hello_name)
        #
        self.checkbox1.toggled.connect(self.print_is_hidden)
        # 将Cancel按钮关联给关闭窗口
        self.cancel_btn.clicked.connect(self.close)
        self.combobox.activated.connect(self.on_activated_int)
        self.combobox.activated[str].connect(self.on_activated_str)

    def print_hello_name(self):
        # 定义文本框
        name = self.lineEdit.text()
        print("Hello {}!".format(name))

    def PrintHelloName(self, name):
        print("hahah {}!".format(name))

    def print_is_hidden(self, checked):
        # 选择框返回文本,如果返回当前值,泽下面一行不能用
        # hidden = self.checkbox1.isChecked()
        # if hidden:
        #    print("Hidden")
        # else:
        #    print("Vis")
        if checked:
            print("Hidden")
        else:
            print("Vis")

    # 发出信号连接
    @pyqtSlot(int)
    def on_activated_int(self, index):
        print("ComboBox Index: {0}".format(index))

    @pyqtSlot(str)
    def on_activated_str(self, text):
        print("ComboBox Text: {0}".format(text))

if __name__ == "__main__":
    try:
        test_dialog.close()  # pylint: disable=E0601
        test_dialog.deleteLater()
    except:
        pass

    test_dialog = TestDialog()
    test_dialog.show()

QComboBox的addItem方法用于向组合框中添加项。
activated[str].connect(…)用于连接activated信号到一个槽函数。注意这里使用了[str],它表示当信号被触发时,传递的参数将被解释为str类型

uiTest2

# -*- coding: utf-8 -*-
from PySide2 import QtCore
from PySide2 import QtWidgets
# 获取主窗口调用模块
from shiboken2 import wrapInstance
import maya.OpenMayaUI as omui


# 返回maya的主窗口小部件作为python对象>>>[样板代码]
def maya_main_window():
    # 获取主窗口
    main_window_ptr = omui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)


class MyLineEdit(QtWidgets.QLineEdit):
    enter_pressed = QtCore.Signal(str)

    def keyPressEvent(self, e):
        super(MyLineEdit, self).keyPressEvent(e)

        if e.key() == QtCore.Qt.Key_Enter:
            self.enter_pressed.emit('Enter Key Pressed')
        elif e.key() == QtCore.Qt.Key_Return:
            self.enter_pressed.emit('Return Key Pressed')


class TestDialog(QtWidgets.QDialog):
    # parent:将ui窗口定义给maya的主窗口
    def __init__(self, parent=maya_main_window()):
        super(TestDialog, 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_layouts()
        self.create_connections()

    # 创建按钮
    def create_widgets(self):
        # 输入框,勾选框和按钮
        self.lineEdit = MyLineEdit()

        self.ok_btn = QtWidgets.QPushButton("OK")
        self.cancel_btn = QtWidgets.QPushButton("Cancel")

    # 创建布局
    def create_layouts(self):
        form_layout = QtWidgets.QFormLayout()
        form_layout.addRow("Name:", self.lineEdit)

        button_layout = QtWidgets.QHBoxLayout()
        button_layout.addStretch()
        button_layout.addWidget(self.ok_btn)
        button_layout.addWidget(self.cancel_btn)

        main_layout = QtWidgets.QVBoxLayout(self)
        main_layout.addLayout(form_layout)
        main_layout.addLayout(button_layout)

    # 创建连接
    def create_connections(self):
        self.lineEdit.enter_pressed.connect(self.on_enter_pressed)

        self.cancel_btn.clicked.connect(self.close)

    def on_enter_pressed(self, text):
        print(text)


if __name__ == "__main__":
    try:
        test_dialog.close()  # pylint: disable=E0601
        test_dialog.deleteLater()
    except:
        pass

    test_dialog = TestDialog()
    test_dialog.show()
# -*- coding: utf-8 -*-
from PySide2 import QtCore
from PySide2 import QtWidgets
# 获取主窗口调用模块
from shiboken2 import wrapInstance
import maya.OpenMayaUI as omui


# 返回maya的主窗口小部件作为python对象>>>[样板代码]
def maya_main_window():
    # 获取主窗口
    main_window_ptr = omui.MQtUtil.mainWindow()
    return wrapInstance(long(main_window_ptr), QtWidgets.QWidget)


class MyLineEdit(QtWidgets.QLineEdit):
    enter_pressed = QtCore.Signal(str)

    def keyPressEvent(self, e):
        super(MyLineEdit, self).keyPressEvent(e)

        if e.key() == QtCore.Qt.Key_Enter:
            self.enter_pressed.emit('Enter Key Pressed')
        elif e.key() == QtCore.Qt.Key_Return:
            self.enter_pressed.emit('Return Key Pressed')


class TestDialog(QtWidgets.QDialog):
    # parent:将ui窗口定义给maya的主窗口
    def __init__(self, parent=maya_main_window()):
        super(TestDialog, 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_layouts()
        self.create_connections()

    # 创建按钮
    def create_widgets(self):
        # 输入框,勾选框和按钮
        self.lineEdit = MyLineEdit()

        self.ok_btn = QtWidgets.QPushButton("OK")
        self.cancel_btn = QtWidgets.QPushButton("Cancel")

    # 创建布局
    def create_layouts(self):
        form_layout = QtWidgets.QFormLayout()
        form_layout.addRow("Name:", self.lineEdit)

        button_layout = QtWidgets.QHBoxLayout()
        button_layout.addStretch()
        button_layout.addWidget(self.ok_btn)
        button_layout.addWidget(self.cancel_btn)

        main_layout = QtWidgets.QVBoxLayout(self)
        main_layout.addLayout(form_layout)
        main_layout.addLayout(button_layout)

    # 创建连接
    def create_connections(self):
        self.lineEdit.enter_pressed.connect(self.on_enter_pressed)

        self.cancel_btn.clicked.connect(self.close)

    def on_enter_pressed(self, text):
        print(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、付费专栏及课程。

余额充值