You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt6 QTableView垂直表头Win10无分割线问题咨询

问题结论

该现象属于Qt跨平台原生样式适配的正常差异,既非配置遗漏,也不是PyQt6的已知Bug。Qt默认会自动适配当前操作系统的原生控件视觉规范:Win10原生控件规范默认隐藏垂直表头与内容区域的分割线,KDE桌面的默认样式则默认开启该分割线,因此出现跨平台显示差异。macOS平台默认表现与Win10一致,同样不会显示该分割线。

解决方法

以下两种方案均可实现跨平台显示效果统一:

  • 方案1:仅添加垂直表头分割线,不修改其他全局样式
    在QTableView配置完成后添加样式规则即可,示例代码如下:

    # 给垂直表头的每个 section 添加右侧边框,即分割线
    self.table.verticalHeader().setStyleSheet("QHeaderView::section { border-right: 1px solid #d0d0d0; }")
    

    边框颜色可根据实际设计需求调整,也可设置为系统默认边框色值。

  • 方案2:全局使用跨平台统一样式
    强制指定Qt使用跨平台统一的Fusion样式,所有操作系统下控件效果完全一致,默认自带垂直表头分割线,无需额外配置。只需在QApplication初始化后添加一行代码:

    app.setStyle("Fusion")
    
完整可运行代码(采用方案2)
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QTableView
from PyQt6.QtCore import Qt, QAbstractTableModel

class TableModel(QAbstractTableModel):
    def __init__(self, data):
        super().__init__()
        self._data = data

    def data(self, index, role):
        if role == Qt.ItemDataRole.DisplayRole:
            value = self._data[index.row()][index.column()]
            return value

    def rowCount(self, index):
        return len(self._data)

    def columnCount(self, index):
        return len(self._data[0])

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.table = QTableView()
        data = [
            [7,  9,  2],
            [1, -1, -1],
            [3,  5.3, -5],
            [3,  3,  2],
            [7,  8, 23],
        ]
        self.model = TableModel(data)
        self.table.setModel(self.model)
        self.setCentralWidget(self.table)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    # 全局指定Fusion样式,统一跨平台显示效果
    app.setStyle("Fusion")
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

内容的提问来源于stack exchange,提问作者Fred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:54:04