如何在QTableWidget中显示字典列表中的值?

时间:2019-03-28 17:01:08

标签: python-3.x pyqt pyqt5

大家好。 我正在尝试使用字典列表中的值填充QTableWidget。 但是在表中仅显示最后一个字典中的值。 看起来像先前的值在每个循环上都被重写。 如何使它正确?请帮忙!

spisok = [{'some': 'any 1',
          'some2': 'any 2',
          'some3': 'any 3'},
          {'some': 'any 1a',
           'some2': 'any 2a',
           'some3': 'any 3a'},
          {'some': 'any 1b',
           'some2': 'any 2b',
           'some3': 'any 3b'}
          ]        

for item_list in spisok:
    for col, key in enumerate(item_list):
        for row, value in enumerate(item_list):
            newitem = QTableWidgetItem(value)
            table.setItem(row, col, newitem)

2 个答案:

答案 0 :(得分:0)

    row_count = (len(spisok))
    column_count = (len(spisok[0]))

    table.setColumnCount(column_count) 
    table.setRowCount(row_count)

    table.setHorizontalHeaderLabels((list(spisok[0].keys())))

    for row in range(row_count):  # add items from array to QTableWidget
        for column in range(column_count):
            item = (list(spisok[row].values())[column])
            table.setItem(row, column, QTableWidgetItem(item))

结果:

enter image description here

示例:

spisok = [{'some': 'any 1',
           'some2': 'any 2',
           'some3': 'any 3'},
          {'some': 'any 1a',
           'some2': 'any 2a',
           'some3': 'any 3a'},
          {'some': 'any 1b',
           'some2': 'any 2b',
           'some3': 'any 3b'},
          {'some': 'any 1c',
           'some2': 'any 2c',
           'some3': 'any 3c'},
          {'some': 'any 1d',
           'some2': 'any 2d',
           'some3': 'any 3d'}
          ]

结果:

enter image description here

答案 1 :(得分:0)

尝试一下:

from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *

class TableWidget(QWidget): 
    def __init__(self):
        super().__init__()

        spisok = [{'some': 'any 1',  'some2': 'any 2',  'some3': 'any 3'},
                  {'some': 'any 1a', 'some2': 'any 2a', 'some3': 'any 3a'},
                  {'some': 'any 1b', 'some2': 'any 2b', 'some3': 'any 3b'}
                 ]   

        table = QTableWidget()
        table.setRowCount(3)
        table.setColumnCount(3)

        vbox = QVBoxLayout(self)
        vbox.addWidget(table)

        for row, item_list in enumerate(spisok):
            for col, key in enumerate(item_list):
                newitem = QTableWidgetItem(item_list[key])
                table.setItem(row, col, newitem)


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = TableWidget()
    w.show()
    sys.exit(app.exec_())

enter image description here