gpt4 book ai didi

python - qtablewidget 设置水平标题标签可编辑以添加行

转载 作者:行者123 更新时间:2023-12-01 01:25:21 29 4
gpt4 key购买 nike

如何通过双击添加的行来编辑 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_())

最佳答案

添加行或列时并不意味着对应的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_())

关于python - qtablewidget 设置水平标题标签可编辑以添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411997/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com