【问题标题】:QTableView change header to userinput nameQTableView 将标题更改为用户输入名称
【发布时间】:2019-05-10 15:43:22
【问题描述】:

有没有办法改变 QTableView 的标题?标头不是硬编码的。如果加载了新的 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()

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qtableview


    【解决方案1】:

    许多 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)
    

    【讨论】:

      猜你喜欢
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多