【问题标题】:How to add a row in a tableWidget PyQT?如何在 tableWidget PyQT 中添加一行?
【发布时间】:2014-07-25 12:22:35
【问题描述】:

我目前正在开发一个在 Qt Designer 中设计的小部件。我在尝试将行添加到 PyQT 中的 Qtable 的语法/整体概念上遇到问题。没有方法,我还没有找到动态添加行的方法。任何的意见都将会有帮助。

问候

【问题讨论】:

    标签: python pyqt pyqt4 qtablewidget


    【解决方案1】:

    您可以添加空行,然后再填充所有列。这是在所有其他行下插入行的方法:

    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"))
    

    您还可以在其他位置插入行(不需要在表格末尾)

    【讨论】:

    • 出于某种原因,我还必须制作 table.setColumnCount(3) 以使表格内容可见。 (可能是因为我用的是 PyQt5)
    【解决方案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 类型)。

    【讨论】:

    • 不工作...TypeError: QTableWidget.insertRow(int): too many arguments.... 请编辑答案...
    • 你喜欢tableWidget.setItem(currentRowCount, 0, QTableWidgetItem("Some text"))NOT tableWidget.insertRow(currentRowCount, 0, QTableWidgetItem("Some text"))
    【解决方案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"         
    

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

    【讨论】:

      【解决方案4】:

      你可以使用这个功能

      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)
      

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 2019-08-30
        • 1970-01-01
        • 2017-10-12
        • 2017-05-10
        • 2021-03-29
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        相关资源
        最近更新 更多