Python学习之简易图片浏览器

news2024/12/23 2:03:28

俗话说实践是学习最有效的方法。最近在学习python,于是就参考着各类文章,也倒腾了一个简易图片浏览器,效果图如下:

 整个浏览器分为左右两侧,左侧是地址栏+图片文件列表;右侧则是图片显示区域。

左侧地址栏有四个控件构成,分别是QLineEdit,QPushButton,QListWidget和隐藏的QTreeView。初始化会在QLineEdit显示当前地址,点击右侧按钮,则会展示隐藏的目录树(如下图):

 选中目录后,QlineEdit则会自动更新选中目录的路径地址,而其下方的QlistWidget则显示带预览icon的图片文件。如下是实现上述功能的代码:

def showtree(self):
    # 显示/隐藏treeView
    if self.treeView.isVisible():
        self.treeView.setVisible(False)
    else:
        self.treeView.setVisible(True)

def treeview_init(self):
    # 初始化树形目录
    # 获取系统所有文件
    # 进行筛选只显示文件夹,不显示文件和特色文件
    if os.path.exists(self.lineEdit.text()):
        path = self.lineEdit.text()
    else:
        path = os.path.abspath(os.path.dirname(__file__))

    model01.setFilter(QtCore.QDir.Dirs | QtCore.QDir.NoDotAndDotDot)
    model01.setRootPath(path)

    # 定义创建文件树
    self.treeView.setModel(model01)
    for col in range(1, 4):
        self.treeView.setColumnHidden(col, True)
    self.treeView.doubleClicked.connect(self.fold_choose)

def fold_choose(self, Qmodelidx):
    # 选中文件夹
    path = model01.filePath(Qmodelidx)
    self.lineEdit.setText(path)
    self.treeView.setVisible(False)
    self.listWidget_init()

def listWidget_init(self):
    # 在listWidget显示缩略图
    PathData = []
    filePath = self.lineEdit.text()
    self.listWidget.clear()
    if os.path.exists(filePath) :
        path = filePath
        PathDataSet = os.listdir(path)
    else:
        return

    # 遍历判断拿到的文件是文件夹还是文件,Flase为文件,True为文件夹
    for Data in range(len(PathDataSet)):
        if self.file_extension(PathDataSet[Data]) == '.png' or self.file_extension(PathDataSet[Data]) == '.bmp' or self.file_extension(PathDataSet[Data]) == '.jpg':
            PathData.append(PathDataSet[Data])
            # print(PathDataSet[Data])
    total = len(PathData)
    for i in range(total):
        url = filePath + "/" + PathData[i]
        # print(url)
        item = QListWidgetItem()  # 创建QListWidgetItem对象
        item.setText(PathData[i])
        item.setIcon(QIcon(url))
        self.listWidget.addItem(item)

# 获取文件后缀名
def file_extension(self, filePath):
    return os.path.splitext(filePath)[1]

# 打开图片文件
def listWidget_dbclk(self):
    imgId = self.listWidget.currentIndex().row()
    file = self.lineEdit.text() + "/" + self.listWidget.item(imgId).text()
    self.LoadImage(file)

在图片文件列表选中某个图片文件后,双击打开,就会在右侧显示。右侧区域是一个QScrollArea,图片则是由动态生成的QLabel加载。代码如下:

# 显示图片

def LoadImage(self, filePath):

    img = QPixmap(filePath)

    width = img.width()

    height = img.height()

    

    # 在scrollarea中动态生成加载图片的QLabel

    self.qwidget = QWidget()

    self.qwidget.setFixedSize(width, height)

    self.label = QLabel(self.qwidget)

    self.label.setFixedSize(width, height)

    self.label.setPixmap(img)

    self.scrollArea.setWidget(self.qwidget)

完整代码可以从CSDN的资源下载。

https://download.csdn.net/download/hydekong/87721854

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

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

相关文章

数据结构,二叉搜索树的详解

🧑‍💻作者:程序猿爱打拳,Java领域新星创作者,阿里云社区博客专家。 🗃️文章收录于:数据结构与算法 🗂️JavaSE的学习:JavaSE 🗂️MySQL数据库的学习: MySQL…

Python基础之类

一:什么是类 类即类别/种类,是面向对象分析和设计的基石,如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象…

【AI绘画】Midjourney的使用及程序示例

Midjourney 1.背景2.Midjourney的原理3.Midjourney的使用方法4.Midjourney的示例代码 1.背景 Midjourney 是一款基于深度学习的图像转换工具,其可以将一张图像转换成具有不同风格的图像,例如将一张照片转换成卡通风格的图像。Midjourney 基于 TensorFlow…

Jetson Nano一步到位打开USB摄像头(Rosmaster小车)

背景:我用的rosmaster r2小车配的摄像头是Astra pro,也就是下图这款: 1. 支持的摄像头 Jetson开发包有多个用于连接相机的接口,包括USB、以太网和MIPI CSI-2。流行的相机是现成的支持,而Jetson生态系统合作伙伴支持广…

基于树莓派的OpenEuler基础实验二

文章目录 基于树莓派的OpenEuler基础实验二一、ROS中间件介绍1. ROS话题通信与服务通信2. 常见的ROS终端命令 二、中间件基础实验1. ROS的移植2. ROS的安装和环境配置3. 第一个ROS实践之开启小海龟4. ROS话题实践1)ROS工作区与软件包的创建2)ROS的话题通…

可能是最强的Python可视化神器,建议一试

数据分析离不开数据可视化,我们最常用的就是Pandas,Matplotlib,Pyecharts当然还有Tableau,看到一篇文章介绍Plotly制图后我也跃跃欲试,查看了相关资料开始尝试用它制图。 Plotly Plotly是一款用来做数据分析和可视化的…

《商用密码应用与安全性评估》第二章政策法规2.4商用密码应用安全性评估工作

商用密码应用安全性评估体系发展历程 第一阶段:制度奠基期(2007年11月至2016年8月) 第二阶段:再次集结期(2016年9月至2017年4月) 第三阶段:体系建设期(2017年5月至2017年9月&…

【Vue3】vue3中的watchEffect使用及其他的API

目录 一,watchEffect 二,生命周期 三,什么是hooks? 四,toRef 五,其他组合式API 5.1shallowReactive&shallowRef 5.2readonly&shallowReadonly 5.3.toRaw&markRaw 5.4自定义Ref-customRef ​5.5pr…

SSM框架整合之单表操作

1、Spring和Spring MVC父子容器 概念介绍 1.在Spring与SpringMVC进行整合的时候,一般情况下我们会使用不同的配置文件来配置Spring和SpringMVC,因此我们的应用中会存在至少2个ApplicationContext的实例,由于是在Web应用中,因此最…

基于Html+Css的图片展示26

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

AlgoC++第五课:基于矩阵的算法实现

目录 基于矩阵的算法实现前言1. 矩阵2. 矩阵求导推导3. 矩阵示例代码3.1 Matrix.hpp3.2 Matrix.cpp3.3 main.cpp3.4 拓展-cblas_sgemm3.5 拓展-LU分解 4. 多元线性回归5. 多元逻辑回归6. 最小二乘法7. 岭回归(L2)8. 多元牛顿法9. 高斯牛顿法10. Levenberg-Marquardt(修正牛顿法…

[Platforimio] LVGL +TFT_eSPI实现触摸功能

💥💥💞💞欢迎来到本博客❤️❤️💥💥 本人持续分享更多关于电子通信专业内容以及嵌入式和单片机的知识,如果大家喜欢,别忘点个赞加个关注哦,让我们一起共同进步~ &#x…

Centos下环境变量

文章内容如下: 1)什么是环境变量; 2)如何通过程序获取环境变量; 3) 常识规律 一。环境变量的定义 环境变量就是指一段路径。 定义环境变量主要是为了方便的执行程序。添加环境变量的方法是export PATH$PATH:/A/B&…

医用IT隔离电源在医院特殊场所接地系统的应用

【摘要】我们国家大部分医院的临床救治和确诊都是利用了医疗电气类设备和医用的医疗仪器,因此这些地方的接地问题应该引起我们的高度的重视。IT系统主要是利用了中性点没有直接接地的方式,所以可以减少电压和电流,从而使人类触电的可能性小之…

搭建Serv-U FTP服务器共享文件外网远程访问「无公网IP」

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自内网穿透工具的文章:使用Serv-U搭建FTP服务器并公网访问【内网穿透】 1. 前言…

Midjourney教程(三)——Prompt常用参数

Midjourney教程——Prompt常用参数 为了提升prompt的准确度与输入效率,让midjourney能够生成我们理想中的图片,我们需要学习一下prompt的常用参数 Version version版本号,midjourney支持多种模型,我们可以通过version参数来选择…

字典树(Trie/前缀树)

目录 字典树的概念 字典树的逻辑 字典树的实现 字典树小结 例题强化 字典树的概念 字典树(Trie)是一种空间换时间的数据结构,是一棵关于“字典”的树,主要用于统计、排序和保存大量的字符串。字典树是通过利用字符串的公共前…

广域通信网 - 流量控制(停等协议、滑动窗口协议)

文章目录 1 概述2 流量控制协议2.1 停等协议2.2 滑动窗口协议 1 概述 #mermaid-svg-c9cNIYsOvLpoO4AV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-c9cNIYsOvLpoO4AV .error-icon{fill:#552222;}#mermaid-svg-c9c…

[MLIR] CodeGen Pipeline总结

参考资料: [MLIR] CodeGen Pipeline总结 - 知乎 (zhihu.com) 本文主要以 tensorflow 为例,介绍了其接入 MLIR 后的 CodeGen 过程,以及简要分析了一些现在常用的 CodeGen pipeline。本文是本人在结合博客(Codegen Dialect Overview - MLIR - L…

隐私计算,联邦学习

隐私计算(“隐私保护计算” Privacy-Preserving Computation) 隐私计算是一类技术方案,在处理和分析计算数据的过程中能保持数据不透明、不泄露、无法被计算方法以及其他非授权方获取。 数据方是指为执行隐私保护计算过程提供数据的组织或个…