如何在PyQT的tableWidget中添加一行?

17 投票
4 回答
82832 浏览
提问于 2025-04-18 08:36

我现在正在做一个小工具,这个工具是用Qt Designer设计的。我在用PyQT往Qtable里添加一行的时候遇到了麻烦,特别是语法和整体概念方面。我还没找到可以动态添加行的方法。如果有任何建议,我会很感激。

谢谢

4 个回答

1

你可以使用这个函数

def table_appender(widget, *args):

    def set_columns(len, pos):
        if pos == len-1:
            widget.setItem(widget.rowCount()-1, pos, QTableWidgetItem(args[pos]))
        else:
            widget.setItem(widget.rowCount()-1, pos, QTableWidgetItem(args[pos]))
            set_columns(len, pos+1)
    widget.insertRow(widget.rowCount())
    set_columns(widget.columnCount(), 0)
2

我发现这有点奇怪。要插入一行,你需要按照类似下面的方式操作:

tableWidget = QTableWidget()
currentRowCount = tableWidget.rowCount() #necessary even when there are no rows in the table
tableWidget.insertRow(currentRowCount, 0, QTableWidgetItem("Some text"))

为了更清楚地解释最后一行代码,insertRow()的第一个参数是当前行,第二个参数是当前列(记住,索引是从0开始的),而第三个参数几乎总是需要是QTableWidgetItem类型的)。

3
def add_guest(self):
    rowPosition = self.tableWidget.rowCount()
    self.tableWidget.insertRow(rowPosition)
    guest_name = self.lineEdit.text()
    guest_email = self.lineEdit_2.text()
    numcols = self.tableWidget.columnCount()
    numrows = self.tableWidget.rowCount()           
    self.tableWidget.setRowCount(numrows)
    self.tableWidget.setColumnCount(numcols)           
    self.tableWidget.setItem(numrows -1,0,QtGui.QTableWidgetItem(guest_name))
    self.tableWidget.setItem(numrows -1,1,QtGui.QTableWidgetItem(guest_email))
    print "guest added"         

这是我为我的活动组织应用程序完成的方式。

63

你可以先添加一个空行,然后再填充所有的列。下面是如何在所有其他行下面插入一行的步骤:

rowPosition = self.table.rowCount()
table.insertRow(rowPosition)

这样你就有了一行空行,可以像这样填充它,比如说如果你有3列的话:

table.setItem(rowPosition , 0, QtGui.QTableWidgetItem("text1"))
table.setItem(rowPosition , 1, QtGui.QTableWidgetItem("text2"))
table.setItem(rowPosition , 2, QtGui.QTableWidgetItem("text3"))

你也可以在其他位置插入行(不一定要在表格的最后面)。

撰写回答