PyQt5零基础入门:QLabel显示图像

前言

QLabel是Qt库中的一个部件,通常用于显示文本或富文本文档。然而,QLabel也可以用来显示图像。

一种常见的使用QLabel显示图像的方法是使用QPixmap类。QPixmap可以从文件中接收图片,然后可以使用QLabel的setPixmap()函数将图片插入到标签中。同时,为了使图片适应标签的大小,可以通过设置图片自适应标签大小来间接修改图片尺寸。

然而,如果图像过大,直接用QLabel显示可能会出现有部分图像显示不出来的情况。这时,可以使用Scroll Area部件。将QLabel部件放到Scroll Area部件里面,将两个采用栅格布局,当图像超出了QLabel部件大小时,就会产生滑动杆,这样图像就可以都看到了。

显示静态图片

python 复制代码
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys


class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        label = QLabel(self)
        pixmap = QPixmap('test.png')
        label.setPixmap(pixmap)
        label.setScaledContents(True)

        h_layout = QHBoxLayout()
        h_layout.addWidget(label)
        self.setLayout(h_layout)


if __name__ == "__main__":
    app = QApplication([])
    win = Window()
    win.show()
    sys.exit(app.exec())

在代码中

  • pixmap = QPixmap('test.png'):创建一个新的 QPixmap 对象,并尝试从名为 test.png的文件中加载图像。
  • label.setPixmap(pixmap):将标签的 pixmap 设置为先前加载的test.png 图像。
  • label.setScaledContents(True):设置标签以缩放其内容。这意味着如果图像比标签大,它会被缩小以适应标签;如果小,它会被放大。

运行结果如下:

显示动态图

python 复制代码
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.movie = QMovie()
        self.movie.setFileName('./test.gif')
        self.movie.jumpToFrame(0)

        self.label = QLabel()
        self.label.setMovie(self.movie)
        self.label.setAlignment(Qt.AlignCenter)

        self.start_btn = QPushButton('开始')
        self.pause_resume_btn = QPushButton('暂停')
        self.stop_btn = QPushButton('停止')
        self.speed_up_btn = QPushButton('加速')
        self.speed_down_btn = QPushButton('减速')

        self.start_btn.clicked.connect(self.control)
        self.pause_resume_btn.clicked.connect(self.control)
        self.stop_btn.clicked.connect(self.control)
        self.speed_up_btn.clicked.connect(self.control)
        self.speed_down_btn.clicked.connect(self.control)

        h_layout = QHBoxLayout()
        v_layout = QVBoxLayout()

        h_layout.addWidget(self.start_btn)
        h_layout.addWidget(self.pause_resume_btn)
        h_layout.addWidget(self.stop_btn)
        h_layout.addWidget(self.speed_up_btn)
        h_layout.addWidget(self.speed_down_btn)
        v_layout.addWidget(self.label)
        v_layout.addLayout(h_layout)
        self.setLayout(v_layout)

    def control(self):
        if self.sender() == self.start_btn:
            self.movie.start()
        elif self.sender() == self.pause_resume_btn:
            if self.pause_resume_btn.text() == '暂停':
                self.movie.setPaused(True)
                self.pause_resume_btn.setText('继续')
            elif self.pause_resume_btn.text() == '继续':
                self.movie.setPaused(False)
                self.pause_resume_btn.setText('暂停')

        elif self.sender() == self.stop_btn:
            self.movie.stop()
            self.movie.jumpToFrame(0)
        elif self.sender() == self.speed_up_btn:
            speed = self.movie.speed()
            self.movie.setSpeed(speed * 2)
        elif self.sender() == self.speed_down_btn:
            speed = self.movie.speed()
            self.movie.setSpeed(speed // 2)


if __name__ == "__main__":
    app = QApplication([])
    win = Window()
    win.show()
    sys.exit(app.exec())

在代码中:

  • self.movie = QMovie(): 这行代码创建了一个新的 QMovie 对象,并将其赋值给 self.movie。QMovie是 PyQt5 中用于处理动画的类。
  • self.movie.setFileName('./test.gif'): 这行代码设置了要播放的GIF 文件的路径。在这里,文件路径是 './test.gif',意味着 GIF 文件位于与当前执行文件相同的目录下,文件名为test.gif。
  • self.movie.jumpToFrame(0): 这行代码将 GIF 动画跳转到第一帧。jumpToFrame方法接受一个参数,即要跳转到的帧的索引。在这里,索引是 0,表示跳转到 GIF 动画的第一帧。
  • self.label.setMovie(self.movie)是将先前创建的 QMovie 对象(self.movie)设置给 QLabel 对象(self.label)以在标签中播放动画。通过调用 setMovie 方法,将 self.movie 与 self.label 相关联,这样当self.label 显示时,它将播放 self.movie 指定的 GIF 动画。
  • 随后创建了多个用于控制GIF播放的按钮,使用self.sender识别按下的按钮并调用self.move中的方法操作GIF的播放

运行结果在这里只贴了一个静态图,具体运行请读者自行执行体验

相关推荐
2601_966949654 分钟前
如何利用 1 分钟 K 线在 14:50 精准捕捉尾盘异动?Python 量化实战:1 分钟 K 线 + 全市场扫描
开发语言·人工智能·python·量化·quantdash·量化数据源
海天一色y5 分钟前
强化学习工具函数详解:从经验回放到优势函数计算
人工智能·python·强化学习
阿图灵44 分钟前
OpenCV 算术运算四件套:NOT/AND/OR 位运算与图像混合
图像处理·人工智能·python·opencv·计算机视觉·位运算
边吃番茄边敲代码1 小时前
企业智能助手Agent 安全测试,包含Prompt Injection 和越权工具调用
人工智能·python·功能测试·ai·单元测试·prompt·模块测试
阿图灵1 小时前
OpenCV 阈值与模糊:全局/自适应阈值、Canny 边缘检测与三种模糊
图像处理·人工智能·python·opencv·计算机视觉·边缘检测
桃西西呀1 小时前
国内金价破 1000,「涨了多少」和「该买多少」是数学问题
人工智能·python·数据分析
张人玉1 小时前
茶树 NeRF(Neural Radiance Fields,神经辐射场)三维重建与数据分析可视化系统——基于神经辐射场的茶树三维重建方法实现可视化大屏
python·数据挖掘·数据分析·echarts·three.js
脉动数据行情11 小时前
Python WebSocket 国内商品期货|螺纹钢 & 铁矿石实时行情监听
开发语言·python·websocket
circuitsosk2 小时前
智能体任务拆解与执行:基于ReAct+Plan-and-Execute框架的行业Skill构建实录
前端·javascript·python·react.js·react·llm agent·智能体编排
麻雀飞吧2 小时前
近期量化工具怎么选,先看你卡在哪一环
人工智能·python