如果您想显示排列在表中的数据,可以使用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())
最终应用程序如下所示:
试验代码:
# 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())
试验结果: