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

如何使用PyQt5实现标签栏文本横向显示

解决PyQt5侧边标签栏文本横向显示的问题

我在使用PyQt5开发界面时,将标签栏位置设置为左侧(QTabWidget.West),默认标签内文本是垂直显示的,希望改成横向显示。以下是我尝试的代码,但未能实现预期效果:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTabWidget, QVBoxLayout
from PyQt5.QtCore import Qt


class ConnectedWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Connected Window")
        self.setStyleSheet("background-color: white;")

        tab_widget = QTabWidget(self)
        tab_widget.setStyleSheet(
            "QTabBar::tab { width: 180px; height: 180px; background-color: #4B4848; color: white; font-size: 16px; font-weight: bold; border-radius: 0px; padding-left: 10px;writing-mode: horizontal; }"
            "QTabBar::tab:selected { background-color: #22a9e1; }"
        )
        tab_widget.setTabPosition(QTabWidget.West)

        tab1 = QWidget()
        tab2 = QWidget()
        tab3 = QWidget()

        tab_widget.addTab(tab1, "CHOICE OF ESSAY")
        tab_widget.addTab(tab2, "SELECT PIPETTE")
        tab_widget.addTab(tab3, "TYPE OF PLATE")

        start_sampling_button = QPushButton("START SAMPLING", self)
        start_sampling_button.setStyleSheet(
            "background-color: #4B4848; color: white; font-size: 24px; border-radius: 10%; padding: 10px;"
        )
        start_sampling_button.setFixedSize(300, 100)

        main_layout = QVBoxLayout(self)
        main_layout.addWidget(tab_widget)
        main_layout.addWidget(start_sampling_button, alignment=Qt.AlignRight | Qt.AlignBottom)

        self.setLayout(main_layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    connected_window = ConnectedWindow()
    connected_window.showMaximized()

    sys.exit(app.exec_())

问题分析与解决方案

代码中的核心问题是样式表内writing-mode属性值使用错误,Qt样式表不支持horizontal这个值,同时侧边标签栏默认会自动旋转文本,需要额外配置关闭该行为。

修正后的完整代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTabWidget, QVBoxLayout
from PyQt5.QtCore import Qt


class ConnectedWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Connected Window")
        self.setStyleSheet("background-color: white;")

        tab_widget = QTabWidget(self)
        tab_widget.setStyleSheet(
            "QTabBar::tab { width: 180px; height: 60px; background-color: #4B4848; color: white; font-size: 16px; font-weight: bold; border-radius: 0px; padding: 10px; writing-mode: horizontal-tb; text-align: left; }"
            "QTabBar::tab:selected { background-color: #22a9e1; }"
        )
        tab_widget.setTabPosition(QTabWidget.West)
        # 关闭Qt自动旋转侧边标签文本的行为
        tab_widget.setTabShape(QTabWidget.Rounded)

        tab1 = QWidget()
        tab2 = QWidget()
        tab3 = QWidget()

        tab_widget.addTab(tab1, "CHOICE OF ESSAY")
        tab_widget.addTab(tab2, "SELECT PIPETTE")
        tab_widget.addTab(tab3, "TYPE OF PLATE")

        start_sampling_button = QPushButton("START SAMPLING", self)
        start_sampling_button.setStyleSheet(
            "background-color: #4B4848; color: white; font-size: 24px; border-radius: 10%; padding: 10px;"
        )
        start_sampling_button.setFixedSize(300, 100)

        main_layout = QVBoxLayout(self)
        main_layout.addWidget(tab_widget)
        main_layout.addWidget(start_sampling_button, alignment=Qt.AlignRight | Qt.AlignBottom)

        self.setLayout(main_layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    connected_window = ConnectedWindow()
    connected_window.showMaximized()

    sys.exit(app.exec_())

关键修改点

  • 将样式表中的writing-mode: horizontal替换为Qt支持的writing-mode: horizontal-tb(表示水平方向,从上到下排版)
  • 调整标签高度为60px,适配横向文本的显示需求
  • 添加text-align: left确保文本左对齐,提升视觉效果
  • 调用tab_widget.setTabShape(QTabWidget.Rounded),关闭Qt对侧边标签文本的自动旋转逻辑

内容的提问来源于stack exchange,提问作者Serigne Ahmadou Mbacke Fall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:17:03