PyQt5——加载图片的几种方式

本文介绍了如何在Python的Qt应用中使用样式表设置背景图片的自适应效果,包括拉伸和平铺,并展示了使用QPixmap加载图片并调整大小以及重写paintEvent事件进行绘制的方法。
摘要由CSDN通过智能技术生成

1.使用样式表

(1)背景:自适应图片,图片会根据窗口大小进行自动拉伸

self.label1.setStyleSheet("QWidget{border-image: url('./images/tupian.png') }")

(2)背景:图片为平铺,不改变图片大小

self.label2.setStyleSheet("QWidget{background-image: url('./images/tupian.png') }")

(3)前景:自适应图片,图片会根据窗口大小进行自动拉伸

self.label3.setStyleSheet("QWidget{Image: url('./images/tupian.png') }")

2.使用QPixmap

   通过使用 QPixmap 的构造函数和 setPixmap 函数,加载图像文件并在 QLabel 中显示图像

   将图片调整到所需大小,因此清晰度会有损失

pic = QPixmap('./images/tupian.png')
pic = pic.scaled(380, 380)
self.label5.setPixmap(pic)

3.重写paintEvent事件

paintEvent(QPaintEvent*)函数是QWidget类中的虚函数,用于ui的绘制,会在多种情况下被其他函数自动调用

def paintEvent(self, a0: QPaintEvent) -> None:
    painter = QPainter(self)
    pixmap = QPixmap('./images/tupian.png')
    painter.drawPixmap(QRect(405,405,385,380), pixmap)

示例:

#coding = 'utf-8'

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.Init_UI()
    def Init_UI(self):
        self.setGeometry(300,300,1200,800)
        self.setWindowTitle('加载图片')

        self.layout = QGridLayout()

        self.label1 = QLabel()
        self.label1.resize(300, 300)
        # 背景:自适应图片,根据窗口大小对图片拉伸
        self.label1.setStyleSheet("QWidget{border-image: url('./images/tupian.png') }")

        self.label2 = QLabel()
        self.label2.resize(300, 300)
        # 背景:平铺,图片尺寸不变
        self.label2.setStyleSheet("QWidget{background-image: url('./images/tupian.png') }")

        self.label3 = QLabel()
        self.label3.resize(300, 300)
        # 前景:自适应图片,根据窗口大小对图片拉伸
        self.label3.setStyleSheet("QWidget{Image: url('./images/tupian.png') }")

        self.label4 = QLabel()
        self.label4.resize(300, 300)
        # painter = QPainter()
        # pixmap = QPixmap('./images/tupian.png')
        # painter.drawPixmap(label4.rect(), pixmap)

        self.label5 = QLabel()
        self.label5.resize(300, 300)
        pic = QPixmap('./images/tupian.png')
        pic = pic.scaled(380, 380)
        self.label5.setPixmap(pic)

        self.layout.addWidget(self.label1, 0, 0, 1, 1)
        self.layout.addWidget(self.label2, 0, 1, 1, 1)
        self.layout.addWidget(self.label3, 1, 0, 1, 1)
        self.layout.addWidget(self.label4, 1, 1, 1, 1)
        self.layout.addWidget(self.label5, 1, 2, 1, 1)

        self.setLayout(self.layout)

        self.show()

    def paintEvent(self, a0: QPaintEvent) -> None:
        painter = QPainter(self)
        pixmap = QPixmap('./images/tupian.png')
        painter.drawPixmap(QRect(405,405,385,380), pixmap)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    app.exit(app.exec_())

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值