2017-01-06 9 views
1

誰もQTableViewに垂直および水平ヘッダーを追加する方法を知っていますか?私はこれを数時間今作業しており、私はそれを把握していないようです。 現在の結果: enter image description herePYQT:水平および垂直ヘッダー

しかし、私はこれを生産しようとしています:(申し訳ありませんが、私はExcelでそれをやった - しかし、私はあなたがアイデアを得る願っています)。ここで enter image description here

私のコードです:

from PyQt4 import QtCore, QtGui, uic 
import sys 
try: 
    from PyQt4.QtCore import QString 
except ImportError: 
    QString = str 

SYSTEM=0 

class inovaTableModel(QtCore.QAbstractTableModel): 
    def __init__(self, data = [[]], headers=[], parent=None): 
     QtCore.QAbstractTableModel.__init__(self, parent) 
     self.__data = data 
     self.__headers = headers 

    def rowCount(self, parent): 
     return len(self.__data) 

    def columnCount(self, parent): 
     return len(self.__data[0]) 

    def flags(self, index): 
     return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable 

    def data(self, index, role): 

     if role == QtCore.Qt.EditRole: 
      row = index.row() 
      column = index.column() 
      return self.__data[row][column] 

     if role == QtCore.Qt.ToolTipRole: 
      row = index.row() 
      column = index.column() 
      return self.__data[row][column] 

     if role == QtCore.Qt.DisplayRole: 
      row = index.row() 
      column = index.column() 
      return self.__data[row][column] 


    def setData(self, index, value, role = QtCore.Qt.EditRole): 
     if role ==QtCore.Qt.EditRole: 

      row = index.row() 
      column = index.column() 
      self.dataChanged.emit(index, index) 
      return self.__data[row][column] 

    def headerData(self, section, orientation, role): 
     if role == QtCore.Qt.DisplayRole: 

      if orientation == QtCore.Qt.Horizontal: 
       return QString("X","Y","Z") 
      if orientation == QtCore.Qt.Vertical: 
       return QString("List ") + QString(section) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    app.setStyle("plastique") 

    data = ["one", "two", "three",] 
    tableData_alpha = [ 
       ["5","1"], 
       ["10", "3"], 
       ] 


    headers = ["Y", "X", "Z"] 
    model = inovaTableModel(tableData_alpha) 

    tableView = QtGui.QTableView() 
    tableView.show() 
    tableView.setModel(model) 

    sys.exit(app.exec_()) 

Iは、モデルクラスにheaderDataを追加しました。私は垂直ヘッダーを動作させることができますが、水平方向のヘッダーは使用できません。ここでの結果は次のとおりです。

enter image description here

答えて

2

あなたが特定のセクションのヘッダを返すために持っているので、ヘッダデータは、列/行ごとではなく、すべての3 str("X", "Y", "Z")はあなたが必要とする、strの有効な使用ではありませんsectionの値で識別されるものだけを返します。

def headerData(self, section, orientation, role): 
    if role == QtCore.Qt.DisplayRole: 
     if orientation == QtCore.Qt.Horizontal: 
      return ["X", "Y", "Z"][section] 
     if orientation == QtCore.Qt.Vertical: 
      return QString("List ") + QString(section) 
+0

ご回答ありがとうございます。私はモデルビュープログラミングを使用しています。また、私のコードは元の投稿に掲載されています。モデルクラスでsetHeaderDataを使ってみました。しかし、それは動作していません。 –

+0

オリジナルのコードを編集しました。私は垂直ヘッダーを動作させることができましたが、水平ヘッダーでは何かが間違っています。 –

+0

ああ、回答が更新されました。 'setHeaderData'は、ユーザによるヘッダの編集をサポートするためのものです。 – Schollii

関連する問題