PySide6中的QSS(Qt Style Sheet,类似CSS)支持的属性

PySide6中的QSS(Qt Style Sheet,类似CSS)支持的属性可分为通用属性控件专属属性,覆盖样式、布局、交互等场景。以下按分类列出常用属性(包含核心用法):

一、通用属性(所有控件支持)

属性名 作用示例
background-color 设置背景色:background-color: #F5F5F5;
background-image 设置背景图:background-image: url("bg.png");(支持本地/资源文件)
background-repeat 背景图重复方式:background-repeat: no-repeat;(不重复)
background-position 背景图位置:background-position: center;(居中)
color 设置文本颜色:color: #333333;
font-family 字体:font-family: "微软雅黑", "SimHei";
font-size 字号:font-size: 14px;
font-weight 字重:font-weight: bold;(加粗)/normal(常规)
font-style 字体样式:font-style: italic;(斜体)
border 边框简写:border: 1px solid #CCCCCC;(宽度+样式+颜色)
border-width 边框宽度:border-width: 2px;
border-style 边框样式:border-style: dashed;(虚线)/solid(实线)
border-color 边框颜色:border-color: #FF0000;
border-radius 边框圆角:border-radius: 4px;(圆角半径)
padding 内边距(控件内容与边框的距离):padding: 5px;
margin 外边距(控件与其他控件的距离):margin: 3px;
width/height 控件固定宽/高:width: 100px; height: 30px;
min-width/min-height 最小宽/高:min-width: 80px;
max-width/max-height 最大宽/高:max-height: 50px;
opacity 透明度(0-1):opacity: 0.8;(半透明)
visibility 可见性:visibility: hidden;(隐藏但保留空间)/visible(显示)
display 显示方式:display: none;(隐藏且不保留空间)/block(显示)

二、布局相关属性

属性名 作用示例
alignment 子控件对齐方式(仅布局/容器):alignment: center;
spacing 布局内控件间距(仅布局):spacing: 10px;

三、控件专属属性(常用控件)

1. 按钮类(QPushButton/QToolButton等)
属性名 作用示例
icon 按钮图标:icon: url("btn_icon.png");
icon-size 图标大小:icon-size: 20px 20px;(宽×高)
pressed伪状态 按下时样式:QPushButton:pressed { background-color: #E0E0E0; }
hover伪状态 悬浮时样式:QPushButton:hover { border-color: #007AFF; }
checked伪状态 选中时样式(单选/复选):QRadioButton:checked { color: #FF0000; }
2. 输入类(QLineEdit/QTextEdit等)
属性名 作用示例
placeholder-text 占位符文本:QLineEdit { placeholder-text: "请输入用户名"; }(Qt 5.10+)
selection-background-color 选中文本背景色:QLineEdit { selection-background-color: #007AFF; }
selection-color 选中文本颜色:QLineEdit { selection-color: white; }
read-only伪状态 只读时样式:QLineEdit:read-only { background-color: #F0F0F0; }
3. 滚动条(QScrollBar)
属性名 作用示例
handle子控件 滚动条滑块:QScrollBar::handle { background-color: #CCCCCC; }
handle:hover 滑块悬浮:QScrollBar::handle:hover { background-color: #AAAAAA; }
add-line/sub-line 增减按钮:QScrollBar::add-line { background-color: #F0F0F0; }
4. 进度条(QProgressBar)
属性名 作用示例
text-align 进度文本对齐:QProgressBar { text-align: center; }
text 进度文本格式:QProgressBar { text: "%p%"; }(%p表示百分比)
chunk子控件 进度块:QProgressBar::chunk { background-color: #007AFF; }
5. 标签页(QTabWidget)
属性名 作用示例
tab-bar子控件 标签栏:QTabWidget::tab-bar { alignment: center; }(标签居中)
tab子控件 标签项:QTabWidget::tab { padding: 5px 10px; }(标签内边距)
tab:selected 选中标签:QTabWidget::tab:selected { background-color: white; }

四、伪状态(控制交互样式)

所有控件支持的伪状态(用于区分不同状态的样式):

伪状态名 作用
:hover 鼠标悬浮时
:pressed 鼠标按下时
:focus 控件获得焦点时
:disabled 控件禁用时
:enabled 控件启用时(默认)
:checked 单选/复选/按钮组选中时
:unchecked 未选中时
:active 控件处于活动状态时

五、子控件(针对复合控件的内部元素)

部分复合控件支持通过::子控件名设置内部元素样式,常用子控件:

控件名 子控件名 作用示例
QScrollBar ::handle/::add-line 滑块/增加按钮
QProgressBar ::chunk 进度块
QTabWidget ::tab-bar/::tab 标签栏/标签项
QComboBox ::drop-down 下拉箭头按钮:QComboBox::drop-down { border-left: 1px solid #CCCCCC; }
QSpinBox ::up-button/::down-button 上下调节按钮

总结

QSS属性的核心逻辑和CSS一致,但增加了Qt专属的伪状态、子控件,以适配复杂的桌面控件。实际使用时,可通过「通用属性+伪状态+子控件」组合,实现精细的样式控制。

常用控件的QSS样式模板

你需要的PySide6常用控件QSS样式模板已整理完成,覆盖开发中高频使用的10类控件,模板可直接复制使用,也可根据需求调整颜色、尺寸等参数,兼顾美观性和实用性。

一、通用基础样式(全局复用)

css 复制代码
/* 全局通用样式:统一字体、消除默认边距 */
* {
    font-family: "微软雅黑", "SimHei", Arial, sans-serif;
    font-size: 14px;
    margin: 0px;
    padding: 0px;
}

/* 窗口基础样式(QMainWindow/QWidget) */
QWidget {
    background-color: #F5F7FA;  /* 浅灰蓝背景,护眼 */
    color: #333333;             /* 主文本色 */
}

二、按钮类控件(QPushButton/QToolButton)

css 复制代码
/* 普通按钮默认样式 */
QPushButton {
    background-color: #409EFF;  /* 蓝色主色调 */
    color: white;
    border: none;
    border-radius: 4px;         /* 圆角 */
    padding: 6px 12px;          /* 内边距,保证点击区域 */
}

/* 按钮悬浮状态 */
QPushButton:hover {
    background-color: #66B1FF;  /* 浅蓝 hover 效果 */
}

/* 按钮按下状态 */
QPushButton:pressed {
    background-color: #337ECC;  /* 深蓝 pressed 效果 */
}

/* 禁用按钮 */
QPushButton:disabled {
    background-color: #C0C4CC;
    color: #909399;
}

/* 工具按钮(QToolButton)- 适配工具栏 */
QToolButton {
    background-color: transparent;  /* 透明背景 */
    border: none;
    padding: 4px;
}
QToolButton:hover {
    background-color: #E5E9F2;
    border-radius: 4px;
}
QToolButton:pressed {
    background-color: #D0D7E8;
}

三、输入类控件(QLineEdit/QTextEdit/QPlainTextEdit)

css 复制代码
/* 单行输入框 */
QLineEdit {
    background-color: white;
    border: 1px solid #DCDFE6;
    border-radius: 4px;
    padding: 6px 8px;
    selection-background-color: #409EFF;  /* 选中文本背景色 */
    selection-color: white;               /* 选中文本颜色 */
}
/* 输入框获焦 */
QLineEdit:focus {
    border-color: #409EFF;  /* 蓝色焦边框 */
    outline: none;          /* 消除默认外边框 */
}
/* 只读输入框 */
QLineEdit:read-only {
    background-color: #F5F7FA;
    color: #909399;
}
/* 占位符文本颜色 */
QLineEdit {
    placeholder-text-color: #C0C4CC;
}

/* 多行文本框(QTextEdit/QPlainTextEdit) */
QTextEdit, QPlainTextEdit {
    background-color: white;
    border: 1px solid #DCDFE6;
    border-radius: 4px;
    padding: 8px;
    selection-background-color: #409EFF;
    selection-color: white;
}
QTextEdit:focus, QPlainTextEdit:focus {
    border-color: #409EFF;
    outline: none;
}

四、选择类控件(QComboBox/QRadioButton/QCheckBox)

css 复制代码
/* 下拉选择框 */
QComboBox {
    background-color: white;
    border: 1px solid #DCDFE6;
    border-radius: 4px;
    padding: 6px 8px;
}
/* 下拉箭头按钮 */
QComboBox::drop-down {
    border: none;
    width: 20px;
}
QComboBox::down-arrow {
    image: url(:/icons/arrow_down.png);  /* 自定义下拉箭头(替换为自己的图标路径) */
    width: 10px;
    height: 10px;
}
QComboBox:focus {
    border-color: #409EFF;
    outline: none;
}

/* 单选按钮 */
QRadioButton {
    spacing: 6px;  /* 按钮与文本间距 */
}
QRadioButton::indicator {
    width: 16px;
    height: 16px;
    border: 1px solid #DCDFE6;
    border-radius: 8px;  /* 圆形 */
    background-color: white;
}
QRadioButton::indicator:checked {
    background-color: #409EFF;
    border-color: #409EFF;
}

/* 复选框 */
QCheckBox {
    spacing: 6px;
}
QCheckBox::indicator {
    width: 16px;
    height: 16px;
    border: 1px solid #DCDFE6;
    border-radius: 4px;
    background-color: white;
}
QCheckBox::indicator:checked {
    image: url(:/icons/check.png);  /* 勾选图标(替换为自己的路径) */
    background-color: #409EFF;
    border-color: #409EFF;
}

五、进度条(QProgressBar)

css 复制代码
QProgressBar {
    height: 8px;
    border-radius: 4px;
    background-color: #E5E9F2;
    text-align: center;  /* 进度文本居中 */
    color: #666666;
}
/* 进度块样式 */
QProgressBar::chunk {
    background-color: #409EFF;
    border-radius: 4px;
}
/* 进度条(成功状态)- 绿色 */
QProgressBar#successBar {
    background-color: #F0F9EA;
}
QProgressBar#successBar::chunk {
    background-color: #67C23A;
}
/* 进度条(失败状态)- 红色 */
QProgressBar#errorBar {
    background-color: #FEF0F0;
}
QProgressBar#errorBar::chunk {
    background-color: #F56C6C;
}

六、标签页(QTabWidget)

css 复制代码
QTabWidget::tab-bar {
    alignment: left;  /* 标签左对齐 */
}
/* 标签项默认样式 */
QTabBar::tab {
    background-color: #E5E9F2;
    color: #666666;
    padding: 8px 16px;
    margin-right: 2px;  /* 标签间间距 */
    border-top-left-radius: 6px;
    border-top-right-radius: 6px;
}
/* 选中标签 */
QTabBar::tab:selected {
    background-color: white;
    color: #409EFF;
    font-weight: bold;
}
/* 标签悬浮 */
QTabBar::tab:hover:!selected {
    background-color: #D0D7E8;
}
/* 标签页内容区域 */
QTabWidget::pane {
    border: 1px solid #E5E9F2;
    background-color: white;
    border-radius: 0px 6px 6px 6px;
    padding: 8px;
}

七、列表/表格控件(QListWidget/QTableWidget)

css 复制代码
/* 列表控件 */
QListWidget {
    background-color: white;
    border: 1px solid #DCDFE6;
    border-radius: 4px;
    outline: none;
}
/* 列表项 */
QListWidget::item {
    padding: 6px 8px;
}
/* 列表项悬浮 */
QListWidget::item:hover {
    background-color: #E5E9F2;
}
/* 列表项选中 */
QListWidget::item:selected {
    background-color: #409EFF;
    color: white;
}

/* 表格控件 */
QTableWidget {
    background-color: white;
    border: 1px solid #DCDFE6;
    border-radius: 4px;
    gridline-color: #E5E9F2;  /* 表格网格线颜色 */
    outline: none;
}
/* 表格表头 */
QHeaderView::section {
    background-color: #F5F7FA;
    border: none;
    border-bottom: 1px solid #E5E9F2;
    padding: 6px;
    text-align: center;
}
/* 表格单元格 */
QTableWidget::item {
    padding: 4px;
}
QTableWidget::item:selected {
    background-color: #409EFF;
    color: white;
}

八、滚动条(QScrollBar)

css 复制代码
/* 垂直滚动条 */
QScrollBar:vertical {
    width: 8px;
    background-color: transparent;
}
/* 滚动条滑块 */
QScrollBar::handle:vertical {
    background-color: #C0C4CC;
    border-radius: 4px;
    min-height: 20px;  /* 滑块最小高度 */
}
QScrollBar::handle:vertical:hover {
    background-color: #909399;
}
/* 滚动条上下按钮(隐藏) */
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
    height: 0px;
}
/* 水平滚动条 */
QScrollBar:horizontal {
    height: 8px;
    background-color: transparent;
}
QScrollBar::handle:horizontal {
    background-color: #C0C4CC;
    border-radius: 4px;
    min-width: 20px;
}
QScrollBar::handle:horizontal:hover {
    background-color: #909399;
}
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
    width: 0px;
}

九、对话框(QDialog)

css 复制代码
QDialog {
    background-color: white;
    border-radius: 8px;  /* 对话框圆角 */
}
/* 对话框标题栏(自定义标题栏时用) */
QLabel#titleLabel {
    font-size: 16px;
    font-weight: bold;
    color: #333333;
}
/* 对话框关闭按钮 */
QPushButton#closeBtn {
    background-color: transparent;
    color: #909399;
    font-size: 16px;
    border: none;
}
QPushButton#closeBtn:hover {
    color: #F56C6C;
}

十、使用方法示例(Python代码)

python 复制代码
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

class QssDemo(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QSS样式模板示例")
        self.setGeometry(100, 100, 400, 300)

        # 1. 加载QSS样式
        with open("style.qss", "r", encoding="utf-8") as f:  # 将上述样式保存为style.qss
            qss_style = f.read()
        self.setStyleSheet(qss_style)

        # 2. 创建控件(自动应用样式)
        central_widget = QWidget()
        layout = QVBoxLayout(central_widget)
        
        btn1 = QPushButton("普通按钮")
        btn2 = QPushButton("禁用按钮")
        btn2.setDisabled(True)
        
        layout.addWidget(btn1)
        layout.addWidget(btn2)
        self.setCentralWidget(central_widget)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QssDemo()
    window.show()
    sys.exit(app.exec())

总结

  1. 模板特点:所有样式遵循「扁平化设计」,颜色统一(主色调#409EFF,中性色#F5F7FA等),适配大多数桌面应用场景;
  2. 灵活调整:可修改颜色值(如将#409EFF替换为项目主色调)、圆角、内边距等参数,适配个性化需求;
  3. 命名控件 :通过#控件名(如QProgressBar#successBar)可为特定控件设置专属样式,不影响同类型其他控件;
  4. 图标替换:模板中涉及图标的位置(如下拉箭头、勾选图标),需替换为自己的图标路径(支持本地路径/资源文件)。
相关推荐
枫叶丹42 小时前
【Qt开发】Qt系统(七)-> Qt网络安全
c语言·开发语言·c++·qt·网络安全
草莓熊Lotso2 小时前
Qt 控件核心入门:从基础认知到核心属性实战(含资源管理)
运维·开发语言·c++·人工智能·后端·qt·架构
EniacCheng11 小时前
Windows11 Qt MSVC配置
qt·msvc·调试·winmain
赵民勇13 小时前
Qt Q_CLASSINFO 宏详解
qt
_OP_CHEN16 小时前
【从零开始的Qt开发指南】(二十三)Qt 界面优化之 QSS 实战指南:从入门到精通,让你的界面颜值飙升!
开发语言·c++·qt·前端开发·界面美化·qss·客户端开发
lph00916 小时前
QtMqtt 的编译与QT环境加载配置
开发语言·qt
机器视觉知识推荐、就业指导17 小时前
Qt 小技巧:如何用 Q_PROPERTY 管理属性
服务器·数据库·qt
hqwest17 小时前
码上通QT实战11--监控页面03-绘制湿度盘和亮度盘
开发语言·qt·绘图·自定义组件·部件·qpainter·温度盘
起个名字费劲死了17 小时前
QT + Socket 客户端/服务端 公网通讯
服务器·c++·qt·socket