使用表格小部件显示数据

如果你想显示排列在表格中的数据,使用QTableWidget来实现,无需处理太多配置。

请注意,使用QTableWidget并不是显示表格信息的唯一途径。你也可以创建一个数据模型并使用QTableView来显示它,但这不在本教程的范围内。

注意

这个小部件是一个您可以进一步自定义的现成版本。要了解更多关于Qt中的模型/视图架构,请参考其官方文档

  1. 导入 QTableWidget, QTableWidgetItem, 和 QColor 来显示背景颜色:

    import sys
    from PySide6.QtGui import QColor
    from PySide6.QtWidgets import (QApplication, QTableWidget,
                                   QTableWidgetItem)
    
  2. 创建一个简单的数据模型,包含不同颜色的名称列表和十六进制代码:

    colors = [("Red", "#FF0000"),
              ("Green", "#00FF00"),
              ("Blue", "#0000FF"),
              ("Black", "#000000"),
              ("White", "#FFFFFF"),
              ("Electric Green", "#41CD52"),
              ("Dark Blue", "#222840"),
              ("Yellow", "#F9E56d")]
    
  3. 定义一个函数将十六进制代码转换为RGB等效值:

    def get_rgb_from_hex(code):
        code_hex = code.replace("#", "")
        rgb = tuple(int(code_hex[i:i+2], 16) for i in (0, 2, 4))
        return QColor.fromRgb(rgb[0], rgb[1], rgb[2])
    
  4. 初始化 QApplication 单例:

    app = QApplication()
    
  5. 配置QTableWidget使其行数与colors结构中的项目数量相同,列数与一个颜色条目的成员数加一相同。您可以使用setHorizontalHeaderLabels设置列名,如下所述:

    table = QTableWidget()
    table.setRowCount(len(colors))
    table.setColumnCount(len(colors[0]) + 1)
    table.setHorizontalHeaderLabels(["Name", "Hex Code", "Color"])
    

    注意

    使用+ 1的原因是为了包含一个新列,我们可以在其中显示颜色。

  6. 遍历数据结构,创建QTableWidgetItems实例,并使用x, y坐标将它们添加到表格中。这里的数据是按行分配的:

    for i, (name, code) in enumerate(colors):
        item_name = QTableWidgetItem(name)
        item_code = QTableWidgetItem(code)
        item_color = QTableWidgetItem()
        item_color.setBackground(get_rgb_from_hex(code))
        table.setItem(i, 0, item_name)
        table.setItem(i, 1, item_code)
        table.setItem(i, 2, item_color)
    
  7. 显示表格并执行QApplication

    table.show()
    sys.exit(app.exec())
    

最终的应用程序将如下所示:

QTableWidget example