【问题标题】:iterate over items in QTableWidget [duplicate]迭代QTableWidget中的项目[重复]
【发布时间】:2020-04-09 17:52:13
【问题描述】:

我用QTableWidget 类创建了一个简单的表并插入了一些数据。

我认为迭代表格会很容易,就像

 for item in self.table_widget.items():
            print(item)

这段代码显然不起作用,但是有没有一种 Python 的方式来迭代创建的表中的项目? 例如打印第一列的所有项目?

到目前为止,我还没有找到有用的文档如何在 qt 中执行该操作

在下面的代码中,我设法从当前选定的单元格中获取数据,但这不是我想要的输出


import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg





class LambdaTableWidget(qtw.QWidget):
    '''
    Main Window mit
    '''



    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # your code will go here


        # interface

        # position
        qtRectangle = self.frameGeometry()
        centerPoint = qtw.QDesktopWidget().availableGeometry().center()
        qtRectangle.moveCenter(centerPoint)
        self.move(qtRectangle.topLeft())
        # size
        self.resize(700, 410)
        # frame title
        self.setWindowTitle("QTableWidget Test")
        # heading
        heading_label = qtw.QLabel('add Widget')
        heading_label.setAlignment(qtc.Qt.AlignHCenter | qtc.Qt.AlignTop)




        # add Button
        self.addwidget_button = qtw.QPushButton("add Widget")
        self.test_button = qtw.QPushButton("test feature")

        # table Widget
        self.table_widget = qtw.QTableWidget(12 , 3)

        self.table_widget.removeRow(-1)
        self.table_widget.insertRow(-1)

        # layout
        self.main_layout = qtw.QGridLayout()
        self.main_layout.addWidget(self.addwidget_button, 0, 0)
        self.main_layout.addWidget(self.test_button, 1, 0)
        self.main_layout.addWidget(self.table_widget,2,0)
        self.setLayout(self.main_layout)

        self.show()

        # functionality
        self.test_button.clicked.connect(self.iterateover)

    def iterateover(self):
        row = self.table_widget.currentRow()
        colum = self.table_widget.currentColumn()
        value = self.table_widget.item(row,colum)
        value = value.text()
        print(value)


    def iterate(self):
        for item in self.table_widget.items():
            print(item)


if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = LambdaTableWidget()
    sys.exit(app.exec_())



【问题讨论】:

    标签: python pyqt pyqt5


    【解决方案1】:

    int QTableWidget::rowCount() 常量

    返回行数。


    QTableWidgetItem *QTableWidget::item(int row, int column) const

    如果已设置,则返回给定行和列的项目;否则返回 nullptr。


    import sys
    from PyQt5 import QtWidgets as qtw
    from PyQt5 import QtCore as qtc
    from PyQt5 import QtGui as qtg
    
    
    class LambdaTableWidget(qtw.QWidget):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
    
            # position
            qtRectangle = self.frameGeometry()
            centerPoint = qtw.QDesktopWidget().availableGeometry().center()
            qtRectangle.moveCenter(centerPoint)
            self.move(qtRectangle.topLeft())
            # size
            self.resize(700, 410)
            # frame title
            self.setWindowTitle("QTableWidget Test")
            
            # heading ???
            heading_label = qtw.QLabel('add Widget')
            heading_label.setAlignment(qtc.Qt.AlignHCenter | qtc.Qt.AlignTop)
    
            # add Button
            self.addwidget_button = qtw.QPushButton("to print all the items from the first column")
            self.test_button = qtw.QPushButton("test feature")
    
            # table Widget
            self.table_widget = qtw.QTableWidget(12 , 3)
    
    # ?        self.table_widget.removeRow(-1)  # Removes the row row and all its items from the table.
    # ?        self.table_widget.insertRow(-1)  # Inserts an empty row into the table at row.
    
            # layout
            self.main_layout = qtw.QGridLayout()
            self.main_layout.addWidget(self.addwidget_button, 0, 0)
            self.main_layout.addWidget(self.test_button, 1, 0)
            self.main_layout.addWidget(self.table_widget,2,0)
            self.setLayout(self.main_layout)
    
            self.show()
    
            # functionality
            self.test_button.clicked.connect(self.iterateover)
            self.addwidget_button.clicked.connect(self.iterate)         # +++
    
        def iterateover(self):
            row = self.table_widget.currentRow()
            colum = self.table_widget.currentColumn()
            value = self.table_widget.item(row,colum)
            print(f'value=`{value}`')
            if value:
                value = value.text()
                print(f'value=`{value}`')
    
        def iterate(self):
    #        for item in self.table_widget.items():
    
            column = 0
            # rowCount() This property holds the number of rows in the table
            for row in range(self.table_widget.rowCount()): 
                # item(row, 0) Returns the item for the given row and column if one has been set; otherwise returns nullptr.
                _item = self.table_widget.item(row, column) 
                if _item:            
                    item = self.table_widget.item(row, column).text()
                    print(f'row: {row}, column: {column}, item={item}')
    
    
    if __name__ == '__main__':
        app = qtw.QApplication(sys.argv)
        w = LambdaTableWidget()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-08
      • 2014-02-13
      • 2011-11-26
      • 2012-07-10
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多