qtablewidget устанавливает горизонтальный заголовок, редактируемый для добавляемых строк - PullRequest
0 голосов
/ 21 ноября 2018

Как я могу отредактировать метку горизонтального заголовка в qtablewidget для добавленной строки, дважды щелкнув по ней?Я получил код от здесь и настроил его, но он не изменит имя добавляемого столбца.Я использую 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_())

1 Ответ

0 голосов
/ 21 ноября 2018

Когда добавляется строка или столбец, это не означает, что соответствующие 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_())
...