【简单的图像信息展示应用程序】PYQt5

news2024/11/17 11:30:02

写在前面的话

这段代码的作用是创建一个简单的图像信息展示应用程序,用户可以点击按钮查看特定文件夹中图像的文件名、大小,并通过查看按钮查看图像。请注意,文件夹路径需要根据实际情况进行修改。

代码讲解

这段代码是使用PyQt5库创建一个简单的图像信息展示应用程序。它包含一个主窗口类MainWindow和一个图像信息对话框类ImageInfoDialog

首先,代码导入了必要的PyQt5模块和os模块。然后定义了MainWindow类,继承自QMainWindow,它是应用程序的主窗口。在MainWindow的构造函数中,设置了窗口的标题、大小和布局。创建了一个垂直布局,并将其设置为主窗口的中心部件。接着创建了一个按钮QPushButton,并将其添加到布局中。通过clicked信号连接到show_image_info槽函数。

show_image_info函数是MainWindow类的一个方法,它在按钮被点击时调用。该方法创建了一个ImageInfoDialog实例,并显示出来。ImageInfoDialog类是一个继承自QDialog的自定义对话框类,用于显示图像的信息。在构造函数中,设置了对话框的标题、大小和布局,并创建了一个表格QTableWidget用于显示图像的文件名、大小和查看按钮。

通过populate_table方法,获取指定文件夹下的文件列表,并将文件信息填充到表格中。每一行的查看按钮与show_image槽函数连接,用于展示图像。

def populate_table(self):
    folder_path = r'E:\DL\Spelling-Rectifier-Web-App\images'  # 修改为实际的文件夹路径
    files = os.listdir(folder_path)
    self.table.setRowCount(len(files))
    for i, filename in enumerate(files):
        file_path = os.path.join(folder_path, filename)
        item = QTableWidgetItem(filename)
        self.table.setItem(i, 0, item)
        size = os.path.getsize(file_path)
        item = QTableWidgetItem(f'{size / 1024:.2f} KB')
        self.table.setItem(i, 1, item)
        button = QPushButton('View', self.table)
        button.clicked.connect(lambda state, f=file_path: self.show_image(f))
        self.table.setCellWidget(i, 2, button)
    self.table.resizeColumnsToContents()

show_image函数根据文件路径加载图像,并在一个新的对话框中显示。它使用QPixmapQLabel来展示图像。

def show_image(self, file_path):
    pixmap = QPixmap(file_path)
    if not pixmap.isNull():
        self.dialog = QDialog()
        self.dialog.setWindowTitle('View Image')
        self.dialog.setGeometry(500, 500, pixmap.width() + 20, pixmap.height() + 20)
        self.dialog.setLayout(QVBoxLayout())
        label = QLabel(self.dialog)
        label.setPixmap(pixmap)
        self.dialog.layout().addWidget(label)
        self.dialog.exec_()

最后,在__main__块中创建了一个QApplication实例,实例化了MainWindow类并显示主窗口,最后通过调用app.exec_()启动应用程序的事件循环。

完整代码

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


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('MainWindow')
        self.setGeometry(300, 300, 800, 600)
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        layout = QVBoxLayout(self.central_widget)
        self.button = QPushButton('Show Images Info', self.central_widget)
        layout.addWidget(self.button)
        self.button.clicked.connect(self.show_image_info)

    def show_image_info(self):
        self.image_info_dialog = ImageInfoDialog()
        self.image_info_dialog.show()


class ImageInfoDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Image Information')
        self.setGeometry(400, 400, 800, 600)
        self.setLayout(QVBoxLayout())
        self.table = QTableWidget()
        self.layout().addWidget(self.table)
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(['Filename', 'Size', 'View'])
        self.table.horizontalHeader().setStretchLastSection(True)
        self.table.verticalHeader().setVisible(False)
        self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table.setShowGrid(False)
        self.populate_table()

    '''文件检索'''
    def populate_table(self):
        folder_path = r'E:\DL\Spelling-Rectifier-Web-App\images'  # 修改为实际的文件夹路径
        files = os.listdir(folder_path)
        self.table.setRowCount(len(files))
        for i, filename in enumerate(files):
            file_path = os.path.join(folder_path, filename)
            item = QTableWidgetItem(filename)
            self.table.setItem(i, 0, item)
            size = os.path.getsize(file_path)
            item = QTableWidgetItem(f'{size / 1024:.2f} KB')
            self.table.setItem(i, 1, item)
            button = QPushButton('View', self.table)
            button.clicked.connect(lambda state, f=file_path: self.show_image(f))
            self.table.setCellWidget(i, 2, button)
        self.table.resizeColumnsToContents()

    def show_image(self, file_path):
        pixmap = QPixmap(file_path)
        if not pixmap.isNull():
            self.dialog = QDialog()
            self.dialog.setWindowTitle('View Image')
            self.dialog.setGeometry(500, 500, pixmap.width() + 20, pixmap.height() + 20)
            self.dialog.setLayout(QVBoxLayout())
            label = QLabel(self.dialog)
            label.setPixmap(pixmap)
            self.dialog.layout().addWidget(label)
            self.dialog.exec_()


if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

代码功能演示

在这里插入图片描述

注意事项

  1. 检索图像的文件路径要正确
  2. 图像显示大小不能调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

特征选择:过滤法,嵌入法,包装法

特征选择时首先要去除冗余特征。 它是由其他其他的特征中推演出来的。比如,一个球的体积,那么半径这个特征就是冗余的,因为我们可以由球的体积推算半径。冗余特征在很多时候都是不起作用的 过滤法 过滤方法通常用作预处理步骤,特…

c++11 标准模板(STL)(std::basic_ios)(三)

定义于头文件 <ios> template< class CharT, class Traits std::char_traits<CharT> > class basic_ios : public std::ios_base 类 std::basic_ios 提供设施&#xff0c;以对拥有 std::basic_streambuf 接口的对象赋予接口。数个 std::basic_ios…

2013年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2013考研英语&#xff08;二&#xff09;真题 Section I Use of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on ANSWER SHEET 1. (10 points) Given the advantages of electronic money, you mi…

某农业大学数据结构A-第2周作业

1.两个顺序表集合的差集 【问题描述】两个顺序表集合的差集 【样例输入】 25 33 57 60 48 9 13 0 12 50 23 60 4 34 25 13 0 【样例输出】 33 57 48 9 【注意】0代表输入的结束&#xff1b;可以用C风格实现&#xff0c;也可以用C风格实现&#xff0c;两种风格大家均需掌握 #…

Kafka架构

5.kafka系统的架构 5.1主题topic和分区partition topic Kafka中存储数据的逻辑分类&#xff1b;你可以理解为数据库中“表”的概念&#xff1b; 比如&#xff0c;将app端日志、微信小程序端日志、业务库订单表数据分别放入不同的topic partition分区&#xff08;提升kafka吞…

【Proteus仿真】常用器件名称

前言 我常用的仿真器件加上收集的&#xff0c;基于Proteus8.13版本。以下分为两部分&#xff0c;内容都一样&#xff0c;一部分是纯文字&#xff0c;一部分是文字图片&#xff0c;方便快速获取和定位。等积累了更多的器件后会在更新的。搜索时可以用CtrlF快速查找。 命名的规则…

管理类联考——英语二——技巧篇——写作——B节——议论文——必备替换句型

议论文必备替换句型 (一&#xff09;表示很明显/众所周知的句型 It is obvious thatIt is clear thatIt is apparent thatIt is evident thatlt is self-evident thatIt is manifest thatIt is well-knownIt is known to all thatIt is widely-accepted thatIt is crystal-cl…

三层交换机互联互通配置 华为交换机

#三层交换机互联互通 交换机配置 命令 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #创建三个Vlan10 [Huawei]vlan 10 [Huawei-vlan10]quit [Huawei]vlan 20 [Huawei-vlan20]quit [Huawei]vlan 30 [Huawei-vlan30]quit #接…

2023六月第二周(juc知识点记录)

1、多线程资源竞争 先创建资源类&#xff0c;并给线程加锁&#xff0c;推荐使用reatrantlock&#xff0c;然后写业务&#xff0c; 加锁了说明肯定要有执行条件&#xff0c;例如抢到锁还要判断库存必须大于0&#xff0c; 否则线程等待await,然后执行业务&#xff0c;最后创建多个…

一分钟图情论文:《运用服务场景模型理解挪威学术图书馆中的学生体验》

一分钟图情论文&#xff1a;《Applying the servicescape model to understand student experiences of a Norwegian academic library》 1981年&#xff0c;Booms, B. H.和Bitner, M. J.1在一篇市场营销学科的论文中引入了Servicescape模型&#xff0c;用于描述和分析服务场所…

无线供电原理、种类及应用方案介绍

目录 一、无线供电种类 二、无线供电的原理 磁共振技术的电路组成 微波能量传输 三、无线供电的优势 四、市场应用 五、市场趋势 参考文献 一、无线供电种类 包含电磁场耦合能量传输&#xff08;电磁磁感应&#xff08;近场供电&#xff09;、磁共振&#xff08;远场供…

easyX库颜色模型和颜色及样式设置相关函数(注释版)

0.颜色模型和颜色及样式设置相关函数概览 本次我给你带了easyX库系列的颜色模型和样式设置的相关函数&#xff0c;希望您能看得开心。 函数或数据类型描述LINESTYLE画线样式对象。FILLSTYLE填充样式对象。setbkcolor设置当前设备绘图背景色。setlinecolor设置当前设备画线颜色…

[易语言][原创]使用易语言部署yolov8的onnx模型

易语言部署yolo系列模型&#xff0c;现在网上有很多但是他们不够简洁也不够专业&#xff0c;有人专门把opencv封装成易语言支持库然后用opencv在易语言端写&#xff0c;其实这种效率没有在C直接推理效率高&#xff0c;因为易语言往C传递图像数据集是需要转换图像数据集格式才能…

十一、docker学习-docker核心之docker网络(1)

docker网络 当开始大规模使用docker时&#xff0c;你会发现需要了解很多关于网络的知识。docker作为目前最火的轻量级容器技术&#xff0c;有很多令人称道的功能&#xff0c;如docker的镜像管理。然而&#xff0c;docker同样有着很多不完善的地方&#xff0c;网络方面就是Dock…

Nexus搭建Maven私有库介绍

为什么需要Maven私有库&#xff1f; 使用Maven获取Java依赖包的时候&#xff0c; 默认是从Maven的中央库下载 jar文件&#xff0c; 中央库的地址是&#xff1a; https://repo.maven.apache.org/maven2 。 如果下载速度慢&#xff0c; 可以使用阿里的镜像&#xff0c; 地址如下…

[元带你学: eMMC协议详解 16] eMMC 安全方案 之 设备锁定(Lock) / 解锁(Unlock) 详解

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4100 字&#xff0c; 内容摘要 1. 锁定与解锁的概念&#xff1f; 2. 设置密码的方法和注意点&#xff1f; 3. 重置密码的方法和注意点&…

(Linux) WSL 适用于Linux的Windows子系统

文章目录 前言环境设置开发者选项启用或关闭Windows功能进入Microsoft应用商场下载下载完成开启PS: 查看运行效果 Linux基础配置环境缺失注册账号设置root账户密码常用环境的安装 VS Code 连接插件连接的快捷方式 END 前言 学习Linux的阻碍&#xff0c;往往第一步就是没有Linu…

Java实现图片的上传和显示

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 文章目录 &#x1f388;前言&#x1f384;前端&#xff1a;&#x1…

ESP32网络应用 -- ESP32-S3使用HTTP协议获取城市天气数据

超文本传输协议(Hypertext Transfer Protocol,HTTP),是一种建立在TCP协议之上,应用非常广泛的请求-响应协议,关于HTTP协议的详细描述,网上已经不乏文章,此处不再详细论述。 作为一款网络功能强大Wi-Fi SOC芯片,ESP32-S3可以通过ESP-IDF编程框架提供的应用程序接口,方…

腾讯云3年轻量应用服务器入口(不要一年的坑)

腾讯云轻量应用服务器2核2G4M和2核4G5M可以一次性选三年&#xff0c;3年轻量2核2G4M带宽396元三年、3年轻量2核4G5M服务器628元三年&#xff0c;轻量应用服务器第二年xufei贵&#xff0c;大家都知道&#xff0c;所以一次性选三年&#xff0c;毕竟限制条件是腾讯云新用户&#x…