QTableView 将 header 更改为用户输入名称
QTableView change header to userinput name
有没有办法改变 QTableView 的 header? header 不是硬编码的。如果加载新的 csv 文件,它们总是会改变。
我希望能够通过双点击来改变耳机。我试图修改 qtablewidget 中的代码,但似乎有问题,因为我的代码以
退出
Process finished with exit code -1073740791 (0xC0000409)
我的代码:
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()
许多 IDE 或编辑器在报告错误类型时遇到问题,因为它们仅提供不清晰的错误代码,建议使用终端或 CMD 执行脚本获取以下消息:
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)
而且很明显错误是因为horizontalHeaderItem()
和setHorizontalHeaderItem()
因为它们不属于QTableView
,所以这些属于QStandardItemModel
也没有QTableViewItem
所以我建议阅读 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)
有没有办法改变 QTableView 的 header? header 不是硬编码的。如果加载新的 csv 文件,它们总是会改变。 我希望能够通过双点击来改变耳机。我试图修改 qtablewidget 中的代码,但似乎有问题,因为我的代码以
退出Process finished with exit code -1073740791 (0xC0000409)
我的代码:
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()
许多 IDE 或编辑器在报告错误类型时遇到问题,因为它们仅提供不清晰的错误代码,建议使用终端或 CMD 执行脚本获取以下消息:
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)
而且很明显错误是因为horizontalHeaderItem()
和setHorizontalHeaderItem()
因为它们不属于QTableView
,所以这些属于QStandardItemModel
也没有QTableViewItem
所以我建议阅读 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)