第二十三篇 -- 为窗体添加背景图片和图标以及设置窗体透明度
效果图:
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)
这样就不必每次刷新界面就重绘背景图了。
还可以为窗体添加图标,会显示在窗体的左上角
self.setWindowIcon(QIcon(r'F:\2048.jpg'))
设置窗体的透明度
form.setWindowOpacity(0.5)
ok.