2016-09-21 66 views
0

我正在嘗試創建一個表格,其中有2列和幾行。 Column1將列出場景中的所有可用網格/地理位置,而Column2將以每個單元格的組合框的形式顯示,其中包含多個選項 - 根據Column1的網格/地理位置,它將在組合框中列出不同的着色器選項因爲它將從文件中讀取。在表格中要說的是,每個項目都是以每行爲基礎。在Maya的QTableWidget中沒有正確添加項目

我目前有填充網格/地理列表到Column1的問題。假設我的場景有5個地理區域 - pCube1, pCube2, pCube3, pCube4, pCube5,在我的表格中,我預計其5行的Column0將被填充爲pCube#,但不是那樣,我將pCube5作爲我的輸出結果。

請參見下面的代碼:

from PyQt4 import QtGui, QtCore 
from functools import partial 
import maya.cmds as cmds 


class combo_box(QtGui.QComboBox): 
    # For combox 
    def __init__(self, *args, **kwargs): 
     super(combo_box, self).__init__(*args, **kwargs) 

def get_all_geos(): 
    all_geos = cmds.ls(type='mesh') 
    return all_geos 


class TestTable(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 

     self.setLayout(QtGui.QVBoxLayout()) 
     self.resize(600, 300) 

     self.myTable = QtGui.QTableWidget() 
     self.myTable.setColumnCount(2) 

     rowCount = len(get_all_geos()) 
     self.myTable.setRowCount(rowCount)  

     self.setTable() 

     self.layout().addWidget(self.myTable) 
     self.myTable.cellChanged.connect(self.update) 

    def setTable(self): 
     # Adding the list of mesh found in scene into first column 
     for geo in get_all_geos(): 
      item = cmds.listRelatives(geo, parent=True)[0] 
      for i in range(0, self.myTable.rowCount()): 
       # instead of being populated with the list of items, I got the same name for the entire column 
       self.myTable.setItem(i, 0, QtGui.QTableWidgetItem(item)) 

       # sets the combobox into the second column 
       box = combo_box() 
       nameList = ("test1","test2","test3") 
       box.addItems(nameList) 
       self.myTable.setCellWidget(i,1,box) 
       box.currentIndexChanged.connect(partial(self.tmp, i)) 

    def tmp(self, rowIndex, comboBoxIndex): 
     item = "item " + str(comboBoxIndex) 
     self.myTable.setItem(rowIndex, 2, QtGui.QTableWidgetItem(item)) 



if __name__ == "__main__": 
    tableView = TestTable() 
    tableView.show() 

在我的setTable功能,item沒有被正確處理?當我試圖將其添加到QTableWidget。有人可以建議嗎?

此外,如果任何人都可以回答,我使用的格式是否適用於我試圖實現的情景,正如我在帖子開頭提到的那樣?

回答

1

在您的setTable()方法中,您循環遍歷幾何,然後循環遍歷行。由於每個幾何圖形都代表一行,因此只需要循環遍歷它們並移除其他循環。

修改它像這樣固定的輸出:

def setTable(self): 
    # Adding the list of mesh found in scene into first column 
    geos = get_all_geos() 
    for i in range(0, len(geos)): 
     item = cmds.listRelatives(geos[i], parent=True)[0] 
     # instead of being populated with the list of items, I got the same name for the entire column 
     self.myTable.setItem(i, 0, QtGui.QTableWidgetItem(item)) 

     # sets the combobox into the second column 
     box = combo_box() 
     nameList = ("test1","test2","test3") 
     box.addItems(nameList) 
     self.myTable.setCellWidget(i,1,box) 
     box.currentIndexChanged.connect(partial(self.tmp, i)) 

它是失敗的原因是因爲你的第二個循環保持在列表中的最後一個地理覆蓋的行。

相關問題