pyqt批量显示图片并进行分页显示

本文介绍了一个使用PyQt开发的应用,它可以批量显示用户选择文件夹中的图片,每8张为一页,并提供分页控制按钮,支持上一页和下一页的切换。
摘要由CSDN通过智能技术生成

pyqt批量显示图片并进行分页显示

功能简述

  1. 批量显示选择的文件夹中的图片
  2. 8张图片为一页
  3. 有分页控制按钮,可以选择上一页和下一页

效果

在这里插入图片描述
在这里插入图片描述

代码

import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QFileDialog, QGridLayout
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt


class ImageViewer(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.images = []
        self.current_page = 0
        self.images_per_page = 8
        self.grid_size = 200  # 每个图片的显示大小(这里假设为200x200像素)

    def initUI(self):
        self.setWindowTitle('图片查看器')
        self.setGeometry(300, 300, 800, 600)

        layout = QVBoxLayout()

        self.open_button = QPushButton('打开文件夹')
        self.open_button.clicked.connect(self.openFolder)
        layout.addWidget(self.open_button)

        self.prev_button = QPushButton('上一页')
        self.prev_button.clicked.connect(self.prevPage)
        self.prev_button.setDisabled(True)
        layout.addWidget(self.prev_button)

        self.next_button = QPushButton('下一页')
        self.next_button.clicked.connect(self.nextPage)
        self.next_button.setDisabled(True)
        layout.addWidget(self.next_button)

        self.grid_layout = QGridLayout()
        self.image_labels = [QLabel() for _ in range(8)]
        for i, label in enumerate(self.image_labels):
            self.grid_layout.addWidget(label, i // 4, i % 4)

        widget = QWidget()
        widget.setLayout(self.grid_layout)
        layout.addWidget(widget)

        self.setLayout(layout)

    def openFolder(self):
        folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
        if folder_path:
            self.images = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if
                           os.path.isfile(os.path.join(folder_path, f))]
            if self.images:  # 确保图片列表不为空
                self.current_page = 0
                self.updateImages()  # 先更新图片
                self.updateButtons()  # 然后更新按钮状态
            else:
                # 如果没有图片,可以清空图片列表,并禁用所有按钮(如果需要)
                self.images.clear()
                self.updateButtons()

    def updateButtons(self):
        if self.current_page > 0:
            self.prev_button.setDisabled(True)
        else:
            self.prev_button.setDisabled(False)

        if (self.current_page + 1) * self.images_per_page >= len(self.images):
            self.next_button.setDisabled(True)
        else:
            self.next_button.setDisabled(False)

    def updateImages(self):
        for i, label in enumerate(self.image_labels):
            index = i + self.current_page * self.images_per_page
            if index < len(self.images):
                pixmap = self.loadScaledPixmap(self.images[index], self.grid_size)
                label.setPixmap(pixmap)
            else:
                label.clear()

    def loadScaledPixmap(self, image_path, size):
        original_pixmap = QPixmap(image_path)
        original_size = original_pixmap.size()

        # 计算缩放比例
        width_ratio = size / original_size.width()
        height_ratio = size / original_size.height()
        ratio = min(width_ratio, height_ratio)

        # 根据缩放比例调整图片大小
        scaled_size = original_size * ratio
        scaled_pixmap = original_pixmap.scaled(scaled_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)

        return scaled_pixmap

    def prevPage(self):
        if self.current_page > 0:
            self.current_page -= 1
            self.updateImages()
            self.updateButtons()

    def nextPage(self):
        if (self.current_page + 1) * self.images_per_page < len(self.images):
            self.current_page += 1
            self.updateImages()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ImageViewer()
    ex.show()
    sys.exit(app.exec_())
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyQt是Python编程语言的一个GUI库,用于创建桌面应用程序。QTableView是PyQt中用于显示和编辑表格数据的控件。在QTableView中实现分页显示可以通过以下几个步骤来完成: 1. 创建一个包含数据的QStandardItemModel对象。这个模型对象将用于存储表格数据。 2. 创建一个QTableView对象,并将之前创建的QStandardItemModel对象设置为其模型。 3. 设置QTableView的分页策略为QAbstractItemView.PaginateByRowCount,这样可以实现按行数分页显示。 4. 使用QAbstractItemModel的方法setData()来设置每个单元格的值。 5. 通过调用QTableView的setShowGrid()方法来显示网格线。 6. 创建一个QAbstractItemDelegate类的子类,并重写它的paint()和sizeHint()方法,以便在单元格中显示文本和调整单元格尺寸。 7. 设置QTableView的分页模式为QAbstractItemView.SinglePage。这样可以将表格数据分页显示在同一个页面上。 8. 使用QAbstractItemView的setPaginationRowCount()方法来设置每页显示的行数。 9. 使用QAbstractItemView的setPaginationMode()方法来设置分页模式,以在表格的底部显示分页导航栏。 10. 使用QAbstractItemView的setCurrentPage()方法来切换当前显示的页数。 11. 最后,通过在适当的时候调用QTableView的update()方法来刷新显示的表格数据。 通过以上步骤,我们就可以在PyQt中实现QTableView的分页显示功能。每页显示的行数和页数可以根据需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立秋6789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值