PySide6使用表格小部件显示数据

如果您想显示排列在表中的数据,可以使用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())

最终应用程序如下所示:

PySide6使用表格小部件显示数据_第1张图片

 

试验代码:

# This Python file uses the following encoding: utf-8
import sys
from PySide6.QtGui import QColor
from PySide6.QtWidgets import (QApplication, QWidget, QTableWidget,
                               QTableWidgetItem, QVBoxLayout)

colors = [("Red", "#FF0000"),
          ("Green", "#00FF00"),
          ("Blue", "#0000FF"),
          ("Black", "#000000"),
          ("White", "#FFFFFF"),
          ("Electric Green", "#41CD52"),
          ("Dark Blue", "#222840"),
          ("Yellow", "#F9E56d")]


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


class tableData(QWidget):
    def __init__(self, parent=None):
        super(tableData, self).__init__(parent)
        self.setWindowTitle("My TableData")

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

        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))
            self.table.setItem(i, 0, item_name)
            self.table.setItem(i, 1, item_code)
            self.table.setItem(i, 2, item_color)

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


if __name__ == "__main__":
    app = QApplication([])
    window = tableData()
    window.show()
    sys.exit(app.exec())

 

试验结果:

PySide6使用表格小部件显示数据_第2张图片

 

PySide6使用表格小部件显示数据_第3张图片

 

 

 

 

你可能感兴趣的:(QT及Python应用)