在 PyQt5 的 QTableWidget
中,如果你只想显示第一行单元格上方的边框,可以通过以下方式实现:
- 使用
QTableWidget
的setItemDelegate()
方法,自定义一个委托来控制每个单元格的绘制。 - 通过自定义样式表(
QSS
)来设置表格的边框,但这个方式较难实现单独控制某一行的边框。 - 最简单的方法是通过重载
paintEvent()
或者直接在单元格绘制时,手动修改第一行单元格的边框。
这里是一个使用自定义 QTableWidgetItem
来实现的简单示例,具体代码如下:
import sys
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QPen
class CustomTableWidget(QTableWidget):
def __init__(self, *args, **kwargs):
super(CustomTableWidget, self).__init__(*args, **kwargs)
def paintEvent(self, event):
# 调用父类的 paintEvent 保证正常绘制
super().paintEvent(event)
# 获取第一行的矩形区域
painter = QPainter(self.viewport())
pen = QPen(Qt.black, 2) # 边框宽度为 2,颜色为黑色
painter.setPen(pen)
# 遍历第一行的所有单元格
for col in range(self.columnCount()):
rect = self.visualRect(self.model().index(0, col))
# 绘制单元格上方的边框
painter.drawLine(rect.topLeft(), rect.topRight())
painter.end()
if __name__ == "__main__":
app = QApplication(sys.argv)
table = CustomTableWidget(5, 3) # 创建 5 行 3 列的表格
for i in range(5):
for j in range(3):
table.setItem(i, j, QTableWidgetItem(f"Item {i+1},{j+1}"))
table.show()
sys.exit(app.exec_())
CustomTableWidget
类继承了QTableWidget
,并重载了paintEvent()
方法。- 通过
painter.drawLine()
方法手动为第一行单元格的上方绘制边框。 - 你可以根据需要调整边框的颜色和宽度(通过
QPen
设置)。