第二十三篇 -- 为窗体添加背景图片

效果图:

play.py

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
"""=================================================
@Project -> File    : Operate_system_ModeView_structure -> play.py
@IDE     : PyCharm
@Author  : zihan
@Date    : 2020/5/4 11:16
@Desc    :
================================================="""
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPixmap
from ui_play import Ui_Form


class QmyWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类构造函数
        self.ui = Ui_Form()  # 创建UI对象
        self.ui.setupUi(self)  # 构造UI

    def paintEvent(self, event):  # 绘制窗体背景图片
        painter = QPainter(self)
        pic = QPixmap("background.jpg")
        painter.drawPixmap(0, 0, self.width(), self.height(), pic)
        super().paintEvent(event)


if __name__ == '__main__':
    app = QApplication(sys.argv)  # 创建app
    form = QmyWidget()
    form.show()
    sys.exit(app.exec_())

窗体部分就自己随便画一个窗体,图片用自己喜欢的就行。

值得注意的是paintEvent是每次窗体刷新时都会触发,那么就会带来问题,之前写过一个界面,用到了QTabView和QTreeView,程序会经常的需要进行数据交互,因此时常会触发窗体信号修改TreeView的节点,但是由于窗体更新会触发paintEvent,所以运行过程中TabView的上边沿就老是出现背景图的填充与释放,一闪一闪的,达不到效果,所以针对这种情况,不要用paintEvent函数,只需要在开始为窗体设置一个背景,后来就不管了。方法如下

# 设置窗体背景图
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("./imgs/label.jpg")))
self.setPalette(palette)

这样就不必每次刷新界面就重绘背景图了。

原文地址:https://www.cnblogs.com/smart-zihan/p/12826504.html