Issue
How can I edit the label of a horizontal header in a qtablewidget for an added row by double clicking on it? I got the code from here and adjusted it, but it will not change the name of the added column. I am using python 3.6 and 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_())
Solution
When a row or column is added does not imply that the corresponding QTableWidgetItems have been created, only the number of columns is modified in this case, so the new column does not have a QTableWidgetItem in the header, so the solution is to create it if it is necessary.
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_())
Answered By - eyllanesc
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.