【问题标题】:Python PyQt5 - How to rename table headers?Python PyQt5 - 如何重命名表头?
【发布时间】:2021-03-12 15:29:08
【问题描述】:

我有一个向表格添加新列的函数,但是我不知道如何重命名列标题。 我想要的是用户双击列标题,以便您可以编辑列标题。或者我现在拥有的: 我有一个按钮,可以添加一个新列和行编辑,您可以在其中写入列名。

我不知道如何重命名列标题名称

这是我处理向表中添加新列的代码。

    def addNewColumn(self):
    self.tableColumn =  self.table_Database.columnCount()   
    self.table_Database.setColumnCount(self.tableColumn + 1)
    self.table_Database.setItem(0,self.tableColumn,QtWidgets.QTableWidgetItem())

    if self.table_Database.rowCount() == 0:
        self.table_Database.setRowCount(1)
        self.table_Database.setItem(1,0,QtWidgets.QTableWidgetItem())

【问题讨论】:

  • 你是如何设置现有标题的?
  • 我没有设置它们,当创建列时,它们会自动分配数字,如 1,2,3,4,5....... 我只想知道如何重命名这些颜色,汽车等数字......但可以改变它
  • 我已经尝试过使用这些,但我一定是做错了,因为它总是返回一个错误,指出字符串/整数不是一个可行的选项
  • 从上面的评论和文档中应该很清楚:setHorizontalHeaderLabels 接受 字符串列表setHorizontalHeaderItem 接受 QTableWidgetItem。如果您已经尝试过,为什么不在您的问题中写下它?编辑它并向我们展示您到目前为止所做的工作。

标签: python datatable pyqt pyqt5 table-rename


【解决方案1】:

如果您使用模型.. 请参阅 headerData... 它定义了水平标题... 列。

class TableModel(QtCore.QAbstractTableModel):
    def __init__(self, data):
        super(TableModel, self).__init__()
        self._data = data

    def headerData(self, p_int, Qt_Orientation, role=None):
        if role == Qt.DisplayRole and Qt_Orientation==Qt.Horizontal:
            header = ['Symbol', 'Time', 'Price', 'Current Price','Orig Qty', 'Executed Qty', 'Type']
            return header[p_int]
        else:
            return QtCore.QAbstractTableModel.headerData(self, p_int, Qt_Orientation, role)



    def data(self, index, role):
        if role == Qt.DisplayRole:
            # See below for the nested-list data structure.
            # .row() indexes into the outer list,
            # .column() indexes into the sub-list
            return self._data[index.row()][index.column()]

    def rowCount(self, index):
        # The length of the outer list.
        return len(self._data)

    def columnCount(self, index):
        # The following takes the first sub-list, and returns
        # the length (only works if all rows are an equal length)
        return len(self._data[0])

【讨论】:

    【解决方案2】:

    解决方案/修复: 所以这里是修复,我还添加了一个错误消息,如果列没有名称,将显示,如果没有,则不会添加列

     def addNewColumn(self):
        self.error_message = QtWidgets.QErrorMessage()
        if self.addNewColumnName_TEXT.text() == '':
            self.error_message.showMessage('Column doesn't have a name')
        else:
            self.tableColumn =  self.table_Database.columnCount()         
            self.table_Database.setColumnCount(self.tableColumn + 1)
            self.table_Database.setItem(0,self.tableColumn,QtWidgets.QTableWidgetItem())
            
            self.__tableHeader_Labels.append(self.addNewColumnName_TEXT.text())
            self.table_Database.setHorizontalHeaderLabels(self.__tableHeader_Labels)
    

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多