【问题标题】:qtablewidget set horizontal header lable editable for added linesqtablewidget 为添加的行设置可编辑的水平标题标签
【发布时间】:2023-04-09 23:44:01
【问题描述】:

如何通过双击在 qtablewidget 中为添加的行编辑水平标题的标签?我从here 获取代码并对其进行了调整,但它不会更改添加列的名称。 我正在使用 python 3.6 和 pyqt5。

from PyQt5 import QtWidgets
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit


class MyWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.table = QtWidgets.QTableWidget(5,5)
        self.table.setHorizontalHeaderLabels(['1', '2', '3', '4', '5'])
        self.table.setVerticalHeaderLabels(['1', '2', '3', '4', '5'])
        self.table.horizontalHeader().sectionDoubleClicked.connect(self.changeHorizontalHeader)

        self.button_add_c = QtWidgets.QPushButton('add column', self)
        self.button_add_c.clicked.connect(self.click_button_add_c)

        layout = QtWidgets.QHBoxLayout()
        layout.addWidget(self.table)
        layout.addWidget(self.button_add_c)
        self.setLayout(layout)

    def changeHorizontalHeader(self, index):

        oldHeader = self.table.horizontalHeaderItem(index).text()
        newHeader, okPressed  = QInputDialog.getText(self,' Change header label for column %d', "Your name:", QLineEdit.Normal, oldHeader)

        if okPressed:
            self.table.horizontalHeaderItem(index).setText(newHeader)

    def click_button_add_c(self):
        culPosition = self.table.columnCount()
        self.table.insertColumn(culPosition)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    main = MyWindow()
    main.show()

    sys.exit(app.exec_())

【问题讨论】:

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


    【解决方案1】:

    添加一行或一列并不意味着已经创建了对应的QTableWidgetItems,这种情况下只是修改了列数,所以新列的表头没有QTableWidgetItem,所以解决方法是如有必要,请创建它。

    from PyQt5 import QtCore, QtWidgets
    
    class MyWindow(QtWidgets.QWidget):
        def __init__(self, parent=None):
            super(MyWindow, self).__init__(parent)
    
            self.table = QtWidgets.QTableWidget(5,5)
            self.table.setHorizontalHeaderLabels(['1', '2', '3', '4', '5'])
            self.table.setVerticalHeaderLabels(['1', '2', '3', '4', '5'])
            self.table.horizontalHeader().sectionDoubleClicked.connect(self.changeHorizontalHeader)
    
            self.button_add_c = QtWidgets.QPushButton('add column')
            self.button_add_c.clicked.connect(self.click_button_add_c)
    
            layout = QtWidgets.QHBoxLayout(self)
            layout.addWidget(self.table)
            layout.addWidget(self.button_add_c)
    
        @QtCore.pyqtSlot(int)
        def changeHorizontalHeader(self, index):
            it = self.table.horizontalHeaderItem(index)
            if it is None:
                val = self.table.model().headerData(index, QtCore.Qt.Horizontal)
                it = QtWidgets.QTableWidgetItem(str(val))
                self.table.setHorizontalHeaderItem(index, it)
            oldHeader = it.text()
            newHeader, okPressed  = QtWidgets.QInputDialog.getText(self,
                ' Change header label for column %d', "Your name:", 
                QtWidgets.QLineEdit.Normal, oldHeader)
            if okPressed:
                it.setText(newHeader)
    
        @QtCore.pyqtSlot()
        def click_button_add_c(self):
            culPosition = self.table.columnCount()
            self.table.insertColumn(culPosition)
    
    if __name__ == '__main__':
        import sys
        app = QtWidgets.QApplication(sys.argv)
        main = MyWindow()
        main.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2014-02-14
      相关资源
      最近更新 更多