Is there a way to change the header of QTableView ? The headers are not hard coded. They always change if a new csv file is loaded. I would like to be able to change the headears by doppel clicking on it. I tried to modify the code from qtablewidget but there seems to be something wrong, becuase my code exits with
Process finished with exit code -1073740791 (0xC0000409)
My code:
import sys
from PyQt5 import QtWidgets, QtCore, QtPrintSupport, QtGui
from PyQt5.QtWidgets import *
class main_v2(QtWidgets.QWidget):
def __init__(self, parent=None):
super(main_v2, self).__init__(parent)
self.setGeometry(50, 50, 1100, 850)
self.model = QtGui.QStandardItemModel(self)
self.tableView = QtWidgets.QTableView(self)
#self.tableView.setStyleSheet(stylesheet(self))
self.tableView.setModel(self.model)
self.tableView.horizontalHeader().setStretchLastSection(True)
self.tableView.setShowGrid(True)
self.tableView.setGeometry(12, 150, 800, 550)
item = QtGui.QStandardItem()
self.model.appendRow(item)
self.model.setData(self.model.index(0, 0), "", 0)
self.tableView.resizeColumnsToContents()
self.tableView.horizontalHeader().sectionDoubleClicked.connect(self.changeHorizontalHeader)
@QtCore.pyqtSlot(int)
def changeHorizontalHeader(self, index):
it = self.tableView.horizontalHeaderItem(index)
if it is None:
val = self.tableView.model().headerData(index, QtCore.Qt.Horizontal)
it = QtWidgets.QTableViewItem(str(val))
self.tableView.setHorizontalHeaderItem(index, it)
oldHeader = it.text()
newHeader, okPressed = QtWidgets.QInputDialog.getText(self,
'Change header to', "new name:",
QtWidgets.QLineEdit.Normal, oldHeader)
if okPressed:
it.setText(newHeader)
def main():
app = QApplication(sys.argv)
ex = main_v2()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Many IDEs or editors have problems reporting the type of error since they only provide an error code that is not legible, instead it is advisable to use the Terminal or CMD to execute the script obtaining the following message:
Traceback (most recent call last):
File "main.py", line 27, in changeHorizontalHeader
it = self.tableView.horizontalHeaderItem(index)
AttributeError: 'QTableView' object has no attribute 'horizontalHeaderItem'
Aborted (core dumped)
And clearly the error is caused because horizontalHeaderItem()
and setHorizontalHeaderItem()
since they do not belong to QTableView
, these belong to QStandardItemModel
also that there is no QTableViewItem
so I recommend reading the docs of Qt.
@QtCore.pyqtSlot(int)
def changeHorizontalHeader(self, index):
it = self.model.horizontalHeaderItem(index)
if it is None:
val = self.model.headerData(index, QtCore.Qt.Horizontal)
it = QtGui.QStandardItem(str(val))
self.model.setHorizontalHeaderItem(index, it)
oldHeader = it.text()
newHeader, okPressed = QtWidgets.QInputDialog.getText(self,
'Change header to',
"new name:",
QtWidgets.QLineEdit.Normal,
oldHeader)
if okPressed:
it.setText(newHeader)
User contributions licensed under CC BY-SA 3.0