如何让PySide2 QTabWidget外观更贴近Maya原生样式?
移除QTabWidget标签下方细线并保留Maya原生标签样式
问题描述
想要移除QTabWidget所有标签下方的细线,让UI更贴近Maya原生风格。尝试用样式表QTabWidget::pane {border: 0px solid #000000;}后,细线确实被移除,但未选中标签和选中标签颜色变得同样浅,失去了原生UI的视觉区分度,原本以为Maya内部样式会自动处理好这一点。
解决方案
直接覆盖QTabWidget::pane的边框样式会破坏Maya原生样式中对标签选中状态的关联设置,需要在移除细线的同时,手动恢复标签的选中/未选中样式,匹配Maya原生视觉效果:
修改后的完整代码
from PySide2 import QtWidgets class Tab1(QtWidgets.QWidget): def __init__(self, parent=None): super(Tab1, self).__init__(parent) main_layout = QtWidgets.QVBoxLayout(self) main_layout.addWidget(QtWidgets.QLabel("Tab:")) main_layout.addStretch() class TabWidgetTesting(QtWidgets.QDialog): def __init__(self, parent=None): super(TabWidgetTesting, self).__init__(parent=parent) self.setMinimumSize(240, 320) self.create_widgets() self.create_layouts() def create_widgets(self): self.tab_widget = QtWidgets.QTabWidget() # 自定义样式:移除pane边框,同时恢复标签选中/未选中的颜色区分 self.tab_widget.setStyleSheet(""" QTabWidget::pane { border: none; /* 彻底移除下方细线 */ } QTabBar::tab:selected { background-color: palette(window); /* 匹配Maya选中标签背景色 */ color: palette(windowText); /* 选中标签文字颜色 */ } QTabBar::tab:!selected { background-color: palette(base); /* 匹配Maya未选中标签背景色 */ color: palette(text); /* 未选中标签文字颜色 */ } """) self.tab_widget.addTab(Tab1(), "Tab 1") self.tab_widget.addTab(Tab1(), "Tab 2") def create_layouts(self): main_layout = QtWidgets.QVBoxLayout(self) main_layout.addWidget(self.tab_widget) if __name__ == "__main__": test_dialog = TabWidgetTesting() test_dialog.show()
关键说明
- 用
border: none替代border: 0px solid #000000,更简洁彻底地移除pane边框 - 通过
QTabBar::tab:selected和QTabBar::tab:!selected分别设置两种状态标签的背景色与文字色,利用Qt的palette()自动匹配Maya原生UI的颜色体系,确保样式和Maya环境高度统一 - 仅修改需要调整的局部样式,最大程度保留Maya原生样式的其他细节
内容的提问来源于stack exchange,提问作者Aron Durkin
相关产品推荐
相关产品推荐

