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

如何去除QTabBar组件的多余边框?

解决QTabBar多余边框问题

你遇到的多余边框,主要来自两个源头:QTabBar自身的默认边框,以及布局的默认边距,按以下操作即可彻底去除:

  • 修改QTabBar样式表
    仅设置标签项的边框不够,需要同时给QTabBar组件本身添加无边框样式,还可以自定义选中标签的样式(避免默认高亮边框干扰):

    QTabBar {
        border: none;
    }
    QTabBar::tab {
        border: none;
        padding: 4px 12px; /* 可选:调整标签内边距优化显示效果 */
    }
    QTabBar::tab:selected {
        background-color: #e0e0e0; /* 可选:自定义选中标签的背景色 */
    }
    
  • 清除布局默认边距
    QVBoxLayout默认带有内边距,会让QTabBar周围出现空隙,看起来像边框,需要将布局的内边距设为0:

    layout = QVBoxLayout()
    layout.setContentsMargins(0, 0, 0, 0)  # 去除布局四边的内边距
    layout.addWidget(self.tab_bar)
    

修改后的完整代码:

from PySide2.QtWidgets import QApplication, QTabBar, QWidget, QVBoxLayout
from PySide2.QtCore import QSize
import sys


class Example(QWidget):
    def __init__(self):
        super().__init__()

        self.tab_bar = QTabBar()
        self.tab_bar.setStyleSheet(
            "QTabBar {"
            "    border: none;"
            "}"
            "QTabBar::tab {"
            "    border: none;"
            "    padding: 4px 12px;"
            "}"
            "QTabBar::tab:selected {"
            "    background-color: #e0e0e0;"
            "}"
        )
        self.resize(QSize(300, 40))

        for i in range(5):
            self.tab_bar.addTab(f"Tab {i}")

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.tab_bar)
        self.setLayout(layout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:53:15