[英]PYQT: Horizontal and Vertical Headers
有谁知道如何向QTableView添加垂直和水平标题? 我已经为此工作了几个小时,但似乎无法弄清楚。 当前结果:
但是,我正在尝试生成此代码(很抱歉,我是用excel做到的-但是,我希望您能理解这个想法)。
这是我的代码:
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_())
我将headerData添加到模型类。 我能够使垂直页眉工作,但不能水平。 结果如下:
标头数据是按列/行排列的,因此您必须返回特定节的标头,而不是全部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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.