Python+PyQt6编写一个图片播放器

 更新时间:2025年02月18日 09:09:17   作者:一晌小贪欢  
这篇文章主要为大家详细介绍了Python如何结合PyQt6编写一个图片播放器,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考下

1、背景介绍

我们可以利用pyqt6创建一个图片查看器,其中包括,选则一个包含多张图片的文件夹,然后点击按钮【下一页】或者【上一页】进行图片的翻页

2、库的安装

用途安装
PyQt6界面设计pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、核心代码

①:图片展示

def showImage(self, imagePath):
    self.current_pixmap = QPixmap(imagePath)
    self.resizeImage()

②:自适应尺寸缩放

def resizeImage(self):
    if self.current_pixmap:
        # 获取标签的大小
        label_size = self.lb.size()
        # 保持纵横比缩放图片以适应标签大小
        scaled_pixmap = self.current_pixmap.scaled(
            label_size.width(),
            label_size.height(),
            Qt.AspectRatioMode.KeepAspectRatio,
            Qt.TransformationMode.SmoothTransformation
        )
        self.lb.setPixmap(scaled_pixmap)

4、完整代码

import sys
import os

from PyQt6.QtCore import Qt
from PyQt6.QtGui import QPixmap
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QApplication, QLabel, QFileDialog, QPushButton, QHBoxLayout


class MyWidget(QWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)
        self.setWindowTitle("图片浏览器")
        self.resize(500, 350)

        # 修改 QLabel 的设置
        self.lb = QLabel()
        self.lb.setMinimumSize(200, 200)  # 设置最小尺寸
        self.lb.setAlignment(Qt.AlignmentFlag.AlignCenter)  # 居中对齐

        # 选择文件夹按钮
        self.selectFolderButton = QPushButton("选择文件夹")
        self.selectFolderButton.clicked.connect(self.selectFolder)

        # 上一张按钮
        self.prevButton = QPushButton("上一张")
        self.prevButton.clicked.connect(self.showPrevImage)

        # 下一张按钮
        self.nextButton = QPushButton("下一张")
        self.nextButton.clicked.connect(self.showNextImage)

        # 默认图片列表
        self.imageFiles = []
        self.currentIndex = -1
        self.current_pixmap = None  # 添加存储当前图片的变量

        # 布局设置
        layout = QVBoxLayout()

        # 图片标签占据主要空间
        layout.addWidget(self.lb, 1)  # 添加拉伸因子1

        # 按钮布局
        buttonLayout = QHBoxLayout()
        buttonLayout.addWidget(self.prevButton)
        buttonLayout.addWidget(self.selectFolderButton)
        buttonLayout.addWidget(self.nextButton)

        layout.addLayout(buttonLayout)
        self.setLayout(layout)

    def selectFolder(self):
        folderPath = QFileDialog.getExistingDirectory(self, "选择文件夹")
        if folderPath:
            self.imageFiles = [os.path.join(folderPath, f) for f in os.listdir(folderPath)
                               if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]
            self.currentIndex = 0
            if self.imageFiles:
                self.showImage(self.imageFiles[self.currentIndex])

    def showImage(self, imagePath):
        self.current_pixmap = QPixmap(imagePath)
        self.resizeImage()

    def showPrevImage(self):
        if self.imageFiles and self.currentIndex > 0:
            self.currentIndex -= 1
            self.showImage(self.imageFiles[self.currentIndex])

    def showNextImage(self):
        if self.imageFiles and self.currentIndex < len(self.imageFiles) - 1:
            self.currentIndex += 1
            self.showImage(self.imageFiles[self.currentIndex])

    def resizeEvent(self, event):
        super().resizeEvent(event)
        self.resizeImage()

    def resizeImage(self):
        if self.current_pixmap:
            # 获取标签的大小
            label_size = self.lb.size()
            # 保持纵横比缩放图片以适应标签大小
            scaled_pixmap = self.current_pixmap.scaled(
                label_size.width(),
                label_size.height(),
                Qt.AspectRatioMode.KeepAspectRatio,
                Qt.TransformationMode.SmoothTransformation
            )
            self.lb.setPixmap(scaled_pixmap)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec())

最后效果

以上就是Python+PyQt6编写一个图片播放器的详细内容,更多关于Python图片播放器的资料请关注脚本之家其它相关文章!

相关文章

  • PyQt中使用QtSql连接MySql数据库的方法

    PyQt中使用QtSql连接MySql数据库的方法

    这篇文章主要介绍了PyQt中使用QtSql连接MySql数据库的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python学生管理系统学习笔记

    python学生管理系统学习笔记

    这篇文章主要为大家详细介绍了python学生管理系统的学习笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Python Django 页面上展示固定的页码数实现代码

    Python Django 页面上展示固定的页码数实现代码

    这篇文章主要介绍了Python Django 页面上展示固定的页码数实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python 分发包中添加额外文件的方法

    Python 分发包中添加额外文件的方法

    这篇文章主要介绍了Python 分发包中添加额外文件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 开始着手第一个Django项目

    开始着手第一个Django项目

    这篇文章主要介绍了开始着手第一个Django项目的过程,Django是丰富多彩的Python框架中人气最高的一个,功能多而全,需要的朋友可以参考下
    2015-07-07
  • python利用matplotlib库绘制饼图的方法示例

    python利用matplotlib库绘制饼图的方法示例

    Python强大的原因之一就在于其开源,有很多优秀的程序员为其提供了丰富的类库。Matplotlib就是其中之一,下面这篇文章主要介绍了python如何利用matplotlib库绘制饼图的方法示例,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Tkinter组件实现Radiobutton的示例

    Tkinter组件实现Radiobutton的示例

    Radiobutton组件用于实现多选一的问题,本文主要介绍了Tkinter组件实现Radiobutton的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • python matplotlib 注释文本箭头简单代码示例

    python matplotlib 注释文本箭头简单代码示例

    这篇文章主要介绍了python matplotlib 注释文本箭头简单代码示例,具有一定借鉴价值。
    2018-01-01
  • python条件判断中not、is、is not、is not None、is None代码实例

    python条件判断中not、is、is not、is not None、is None代码实例

    None是python中的一个特殊的常量,表示一个空的对象,下面这篇文章主要给大家介绍了关于python条件判断中not、is、is not、is not None、is None的相关资料,需要的朋友可以参考下
    2024-03-03
  • 一文向您详细介绍指令 python -m pip install的用法和功能

    一文向您详细介绍指令 python -m pip install的用法和功能

    通过本文的介绍,我们详细了解了python -m pip install命令的用法和功能,从基本用法到安装特定版本的包、从其他源安装包、升级和卸载包,再到使用requirements.txt管理依赖,我们逐步深入了解了pip的强大功能,感兴趣的朋友跟随小编一起看看吧
    2024-07-07

最新评论