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


    效果图:

    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)

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

  • 相关阅读:
    java生成验证码
    springmvc笔记(来自慕课网)
    angularJs编写多指令的情况
    四年前端开发的迷茫.
    angularJs的ui-router总结
    grunt构建前端自动化的开发环境
    socket传送文件
    socket--粘包
    socket--接受大数据
    动态导入模块
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/12826504.html
Copyright © 2020-2023  润新知