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

如何移除QTableWidget与QHeaderView外侧网格线仅保留内部网格线

实现方案

核心思路

默认QTableWidget的网格线属性功能有限,我们选择关闭原生网格线,通过单元格和表头的边框自定义绘制网格,既可以灵活调整粗细,也能方便控制仅显示内部网格,同时统一边框粗细即可解决表头和表格线条错位问题。

具体修改步骤

  1. 关闭原生网格线:在QTableWidget初始化代码中新增一行配置,关闭默认自带的网格线
self.listbox.setShowGrid(False)
  1. 替换原有样式表为以下内容,可自行调整2px参数修改网格线粗细:
QTableWidget {
    padding-left: 50px;
    padding-right: 50px;
    border: none;
}

QTableWidget::item {
    border-right: 2px solid #9370DB;
    border-bottom: 2px solid #9370DB;
    padding: 4px;
}

QTableWidget::item:last-column {
    border-right: none;
}

QTableWidget::item:last-row {
    border-bottom: none;
}

QHeaderView::section:horizontal {
    border: none;
    border-right: 2px solid #9370DB;
    padding: 4px;
    background-color: #f0f0f0;
}

QHeaderView::section:horizontal:last {
    border-right: none;
}

QHeaderView::section:vertical {
    border: none;
    border-bottom: 2px solid #9370DB;
    padding: 4px;
    background-color: #f0f0f0;
}

QHeaderView::section:vertical:last {
    border-bottom: none;
}

修改后完整可运行代码

from PySide6.QtCore import *  # type: ignore
from PySide6.QtGui import *  # type: ignore
from PySide6.QtWidgets import *  # type: ignore
import sys


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName(u"verticalLayout_2")
        self.indicatorsLayout = QHBoxLayout()
        self.indicatorsLayout.setObjectName(u"indicatorsLayout")

        self.verticalLayout_2.addLayout(self.indicatorsLayout)

        self.listboxLayout = QGridLayout()
        self.listboxLayout.setObjectName(u"listboxLayout")
        self.listbox = QTableWidget(self.centralwidget)
        if (self.listbox.columnCount() < 5):
            self.listbox.setColumnCount(5)
        if (self.listbox.rowCount() < 10):
            self.listbox.setRowCount(10)
        self.listbox.setObjectName(u"listbox")
        # 关闭原生网格线
        self.listbox.setShowGrid(False)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.listbox.sizePolicy().hasHeightForWidth())
        self.listbox.setSizePolicy(sizePolicy)
        self.listbox.setStyleSheet(u"""
QTableWidget {
    padding-left: 50px;
    padding-right: 50px;
    border: none;
}

QTableWidget::item {
    border-right: 2px solid #9370DB;
    border-bottom: 2px solid #9370DB;
    padding: 4px;
}

QTableWidget::item:last-column {
    border-right: none;
}

QTableWidget::item:last-row {
    border-bottom: none;
}

QHeaderView::section:horizontal {
    border: none;
    border-right: 2px solid #9370DB;
    padding: 4px;
    background-color: #f0f0f0;
}

QHeaderView::section:horizontal:last {
    border-right: none;
}

QHeaderView::section:vertical {
    border: none;
    border-bottom: 2px solid #9370DB;
    padding: 4px;
    background-color: #f0f0f0;
}

QHeaderView::section:vertical:last {
    border-bottom: none;
}
        """)
        self.listbox.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.listbox.setSizeAdjustPolicy(QAbstractScrollArea.AdjustIgnored)
        self.listbox.setRowCount(10)
        self.listbox.setColumnCount(5)
        self.listbox.horizontalHeader().setCascadingSectionResizes(False)
        self.listbox.horizontalHeader().setDefaultSectionSize(100)

        self.listboxLayout.addWidget(self.listbox, 0, 0, 1, 1)

        self.verticalLayout_2.addLayout(self.listboxLayout)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 800, 22))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)

    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
    # retranslateUi


if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:45:01