maya 文件检查 ui和数据分离 (一)

# 可以直接在编辑器运行。

import maya.OpenMayaUI as omui

try:
    from PySide2 import QtGui, QtWidgets ,QtCore
except ImportError:
    from PySide import QtGui, QtWidgets ,QtCore
from  functools import partial


try:
    from shiboken2 import wrapInstance
except:
    from shiboken import wrapInstance


# 让maya为主窗口,使我们创建的界面在maya窗口前面
def _get_maya_main_window():
    pointer = omui.MQtUtil.mainWindow()
    return wrapInstance(long(pointer), QtWidgets.QWidget)


# 每一行设计
class Linelayout(QtWidgets.QDialog):
    
   def __init__(self, *arg):
      super(Linelayout, self).__init__()
      widget = QtWidgets.QHBoxLayout(self)
      k = 0
      for i in arg[0]:
          if   k%3 ==0:
              self.buttons = QtWidgets.QLabel(i)
          elif k%3 ==2:
              self.buttons = QtWidgets.QPushButton(i)
              self.buttons.clicked.connect(partial(self.showpage, i ,arg[0][k-1]))
          else:
              print i    
          k = k+1     
          widget.addWidget(self.buttons)
      self.setLayout(widget)  
      
   def showpage(self,mk,func):
       try:
           func()
       except:
           print mk  

   def functionname(self):
       print "X"     
          
# mytest = Linelayout("SS","SS")
# mytest.show()

# 中心窗口设计
class CenterWidget(QtWidgets.QWidget):

    def __init__(self):
        super(CenterWidget, self).__init__()
        self.initUI()
     
    def initUI(self):
        self.setWindowTitle('grid layout')
        # 数据与ui分离,或者存数据库
        name =[ 
                [u'检查1', 'functionname1', u'修正'],
                [u'检查2', 'functionname2', u'选择'], 
                [u'检查3', 'functionname3', u'确定'],
                [u'检查4', 'functionname4', u'删除'],  
              ]   

        QVBoxLayout = QtWidgets.QVBoxLayout(self)
        j = 0
        self.btns = []
        for i in name:
            self.buttonx = Linelayout(i)
            self.btns.append(self.buttonx)
            QVBoxLayout.addWidget(self.buttonx)
            j = j + 1
        self.setLayout(QVBoxLayout)
    
    
# 外部ui设计
class FileCheck(QtWidgets.QDialog):
    def __init__(self, parent=None):
        check_state = []
        super(FileCheck, self).__init__(_get_maya_main_window())
        self.setWindowTitle('maya file check')

        self.check_state = check_state[:]

        main_layout = QtWidgets.QVBoxLayout(self)

        self.result_label = QtWidgets.QLabel(u"<div><center><font size=5 color=red>文</font>件<font size=5>检</font>查</center</div")
        self.result_label.setFrameStyle(QtWidgets.QFrame.Panel | QtWidgets.QFrame.Sunken)
        main_layout.addWidget(self.result_label)

        scrollWidget = QtWidgets.QWidget()
        scrollWidget.setSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)

        scrollArea = QtWidgets.QScrollArea()
        scrollArea.setWidgetResizable(1)
        main_layout.addWidget(scrollArea)

        myui = CenterWidget()
        scrollArea.setWidget(myui)

        buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok |
                                               QtWidgets.QDialogButtonBox.Cancel)
        main_layout.addWidget(buttonBox)
        buttonBox.accepted.connect(self.check_test)
        buttonBox.rejected.connect(self.reject)

        self.check_test()

    def check_test(self):
        pass

    def check_state_list(self):
        return self.check_state


def main():
    global win
    if "win" in globals():
        try:
            win.deleteLater()
        except:
            pass
    win = FileCheck()
    win.show()

if __name__ == "__main__":
    main()

效果如图。