如何使用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
相关产品推荐
相关产品推荐

