使用Qt4绘制表格后更改列标题

时间:2016-02-24 13:42:40

标签: python pyqt

我有一段代码可以生成一个表,并允许您根据需要输入数据。表格如下所示:

enter image description here

实际输入到表格的内容并不总是温度和电压,而不是每次我通过代码必须去更改列标题时,如果我可以在绘制表格后执行此操作会很好点击它。

我认为这可能会自动完成,因为我可以点击表格并在使用“插入表格”按钮后更改值。

所以我的问题是,如何通过点击来更改列标题?

我的代码如下:

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.table = QtGui.QTableWidget(self)
        self.table.setRowCount(0)
        self.table.setColumnCount(2)
        self.textInput1 = QtGui.QLineEdit()
        self.textInput2 = QtGui.QLineEdit()

        self.button = QtGui.QPushButton("Insert into table")
        self.button.clicked.connect(self.populateTable)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.table)
        layout.addWidget(self.textInput1)
        layout.addWidget(self.textInput2)
        layout.addWidget(self.button)
        self.table.setHorizontalHeaderLabels(("Temperatures;Voltages").split(";"))


    def populateTable(self):

        text1 = self.textInput1.text()
        text2 = self.textInput2.text()

        row = self.table.rowCount()
        self.table.insertRow(row)
        self.table.setItem(row, 0, QtGui.QTableWidgetItem(text1))
        self.table.setItem(row, 1, QtGui.QTableWidgetItem(text2))

app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(400, 100, 550, 450)
window.show()
sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

您可以连接标题sectionDoubleClicked并使用setText重命名相关标题。

将标题的sectionDoubleClicked连接到函数:

self.table.horizontalHeader().sectionDoubleClicked.connect(self.renameHeader)

获取新标题的用户输入并重命名:

def renameHeader(self, index):
    oldHeader = self.table.horizontalHeaderItem(index).text()
    newHeader, confirm = QtGui.QInputDialog.getText(self,
                                                   'Rename Header',
                                                   '',
                                                   QtGui.QLineEdit.Normal,
                                                   oldHeader)
    if confirm:
        self.table.horizontalHeaderItem(index).setText(newHeader)