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