特点:声明式语法、支持CSS特性、子控件自动继承样式
创建主窗口并设置黄色背景
win = QMainWindow()
win.setObjectName("MainWindow")
win.setStyleSheet("#MainWindow{background-color: yellow}")
使用border-image实现背景图平铺
win.setStyleSheet("""
#MainWindow {
border-image: url(./images/python.jpg) 0 0 0 0 stretch stretch;
}
""")
效果对比:
背景类型 | 效果图 |
---|---|
纯色背景 | ![]() |
图片背景 | ![]() |
技巧:使用
border-image
而非background-image
可避免图片重复平铺问题
二、QPalette调色板法(底层控制)
适用场景:需要动态修改背景、精确控制颜色模型
palette = QPalette()
palette.setColor(QPalette.Window, Qt.red) # 设置为红色背景
win.setPalette(palette)
palette = QPalette()
pixmap = QPixmap("./images/python.jpg")
palette.setBrush(QPalette.Background, QBrush(pixmap))
win.setPalette(palette)
关键参数说明:
QPalette.Window
:窗口背景色QPalette.Background
:已弃用,改用QPalette.Window
核心优势:支持自定义绘制逻辑、动态效果、渐变背景
class CustomWindow(QWidget):
def paintEvent(self, event):
painter = QPainter(self)
painter.fillRect(self.rect(), Qt.yellow) # 填充黄色矩形区域
def paintEvent(self, event):
painter = QPainter(self)
pixmap = QPixmap("./images/screen1.jpg").scaled( # 关键缩放
self.width(),
self.height(),
Qt.KeepAspectRatioByExpanding
)
painter.drawPixmap(0, 0, pixmap)
高级效果实现:
实现渐变背景
gradient = QLinearGradient(0, 0, self.width(), self.height())
gradient.setColorAt(0, Qt.blue)
gradient.setColorAt(1, Qt.white)
painter.fillRect(self.rect(), gradient)
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
QSS | 代码简洁,样式分离 | 动态修改不够灵活 | 静态界面、快速开发 |
QPalette | 系统级色彩管理 | 图片适配逻辑复杂 | 需要遵循系统主题 |
paintEvent | 完全控制绘制过程 | 需手动重绘 | 动态背景/自定义效果 |
scaled()
进行智能缩放devicePixelRatio()
处理高清屏显示