1 利用qss

border-img: 会自动缩放图片
background-image: 不会自动缩放图片

  1. self.setStyleSheet("border-image: url(:/back1.jpg)")

image.png
缺点: 该窗口的子控件(如tool_bar, status_bar) 都会被设置背景为此图片

2 利用QPalette

  1. # 设置窗口背景图片
  2. palette = QPalette(self.palette())
  3. pix_map = QPixmap(":/back1.jpg").scaled(self.size())
  4. palette.setBrush(QPalette.Background, QBrush(pix_map))
  5. self.setPalette(palette)

image.png
但是这个方法有一个问题, 拉伸窗口时图片不会跟着缩放
image.png

3 利用paintEvent (推荐)

  1. def paintEvent(self, event: QPaintEvent):
  2. pix_map = QPixmap(":/back1.jpg").scaled(self.size())
  3. painter = QPainter(self)
  4. painter.drawPixmap(self.rect(), pix_map)

这个方法会一直重绘界面, 也有一个缺点, 当你开的一个线程触发了self.accept(), 导致界面已经销毁, 这里还在一直读self里的属性, 会导致程序崩溃, 当然, 可以通过互斥体, 也可以通过自定义信号槽解决这个问题
image.png