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

news/2024/11/8 9:33:00/

写在前面的话

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

代码讲解

这段代码是使用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 osclass 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.ppmy.cn/news/456109.html

相关文章

软件测试第一次做项目之银行项目【操作细节总结】

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试?在这些测试的内容中如何去更好的掌握测试技能保证测试质量,一起来学习探讨交流。 下面为银行测试点的概括: 根据上图,我们可以从以下几个方面重点关注: …

大前端高频面试题详解 确定不看看?(持续更新)

HTML5 1.如何理解HTML5结构语义化? 段落用 p 标签,标题用 h 系列标签,边栏用 aside 标签,主要内容用 main 标签 对开发者: 便于团队的开发和维护在没有加载 CSS 的情况下也能呈现较好的内容结构与代码结构,易于阅读 对浏览器&…

高薪面试题之四.前端

更多面试题请狠狠的点击 下载 视频课:https://edu.csdn.net/course/play/7621 你在昨天/本周学到了什么? 这段事件一直在整理有关前端的面试题目,整理这也题目,不只是为了能够学习应付即将到来的面试,更是为了补补基础…

Web前端知识体系精简

Web前端技术由html、css和javascript三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体…

最新Web前端面试题精选大全及答案

目录 HTML、CSS相关 Javascript相关 三者的异同 Vue相关 55.Vue路由懒加载(按需加载路由) React相关 react 生命周期函数 ******为什么虚拟 dom 会提高性能?(必考) (组件的)状态(state)和属性(props)之间有何不同 shouldComponentUpdate 是做…

2022年最新前端面试题(大前端时代来临卷起来吧小伙子们..持续维护走到哪记到哪)

目录 css经典高频面试题 前端核心手写面试题看你的核心扎实不扎实 js部分面试题 js的数据类型(关于数据类型相关的) 基本数据类型 ES5的5种:Null,undefined,Boolean,Number,String&#xff0c…

重点分析!转型中的好莱坞发生了哪些变局?

https://www.toutiao.com/a6687087527892877832/ 本文摘自笔者在《电影艺术》发表的论文《2018年北美电影产业发展报告》。 在经历了2017年的低潮之后,2018年的北美电影市场迎来了回暖,根据Boxofficemojo的统计显示,全年北美市场取得了118.7…

怎样用VR卖豪宅?兄弟二人将房地产VR体验做到极致

在未来,房地产营销人员向潜在购买者展示高档住宅时,将会带你进入一个包含了虚拟现实、温度变化、人工制造的气味、精细的纹理和空间音效的“感知空间”。 这是来自Byrne兄弟的预测,他们是VMI Studio的联合创始人,这是一家CG技术…