如何设置QDockWidget分组颜色?PySide6分组标题背景统一方案
PySide6合并QDockWidget分组后标题背景颜色不一致的解决方法
我将所有QDockWidget合并到一个分组后,分组标题的背景出现两种不同颜色。请问如何通过QSS或代码将其改为单一颜色?
环境
- macOS 11.6.5
- Python 3.9.12
- PySide6 6.3.1
复现代码
# coding: utf-8 import sys import platform from PySide6.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit from PySide6.QtCore import Qt, QSysInfo def main(): app: QApplication = QApplication(sys.argv) window = QMainWindow() dock1 = QDockWidget("dock1") dock2 = QDockWidget("dock2") for dock in [dock1, dock2]: dock.setFeatures(dock.DockWidgetFloatable | dock.DockWidgetMovable) window.addDockWidget(Qt.LeftDockWidgetArea, dock1) window.addDockWidget(Qt.RightDockWidgetArea, dock2) os_info = QTextEdit() os_info.setText(platform.version()) dock1.setWidget(os_info) qt_info = QTextEdit() info = QSysInfo() qt_info.setText(f"{info.kernelVersion()}, {info.prettyProductName()}, {info.productVersion()}") dock2.setWidget(qt_info) window.show() app.exec() if __name__ == '__main__': main()
应用截图

解决方案
方法一:全局QSS设置
在应用初始化时添加全局样式表,统一覆盖QDockWidget标题栏的背景色:
app: QApplication = QApplication(sys.argv) # 替换#f0f0f0为你需要的单一颜色值 app.setStyleSheet(""" QDockWidget::title { background-color: #f0f0f0; } QDockWidget::tab { background-color: #f0f0f0; } QDockWidget::tab:selected { background-color: #f0f0f0; } """)
方法二:单个QDockWidget设置样式
如果不需要全局统一,可单独为每个QDockWidget设置样式:
for dock in [dock1, dock2]: dock.setFeatures(dock.DockWidgetFloatable | dock.DockWidgetMovable) # 替换#f0f0f0为你需要的单一颜色值 dock.setStyleSheet(""" QDockWidget::title { background-color: #f0f0f0; } QDockWidget::tab { background-color: #f0f0f0; } """)
说明
macOS系统中Qt原生样式会对QDockWidget标题栏有特殊渲染,使用QSS可以完全覆盖原生样式,确保合并分组后标题背景色统一。若需要贴合系统风格,可选择与系统UI色调匹配的颜色值。
内容的提问来源于stack exchange,提问作者Color
相关产品推荐
相关产品推荐

