拂袖一挥,zipfile秒列zip包内容

使用wxpython列出文件夹中的zip文件及内容

最近在做一个文件管理的小工具,需要列出选择的文件夹下的所有zip压缩文件,并在点击某个zip文件时能够显示其中的内容。为此我使用了wxpython来实现这个功能。

1. 导入需要的模块

首先导入程序需要的模块:

import wx
import os
import zipfile
  • wx - 用于构建GUI界面
  • os - 用于访问文件夹和文件
  • zipfile - 用于读取zip文件

2. 创建主界面

使用wx.Frame来创建一个主窗口,里面放一个Panel,然后在Panel上添加2个wx.ListBox作为zip文件列表和文件列表,以及一个wx.Button用于选择文件夹:

class MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, title="Zip File Viewer") self.panel = wx.Panel(self)self.zip_list = wx.ListBox(self.panel)self.file_list = wx.ListBox(self.panel)self.select_btn = wx.Button(self.panel, label="Select Folder")

使用wx.BoxSizer来设置主窗口的布局,列表框水平排列,选择按钮在上方:

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.zip_list, 1, wx.EXPAND)  
sizer.Add(self.file_list, 1, wx.EXPAND)main_sizer = wx.BoxSizer(wx.VERTICAL)
main_sizer.Add(self.select_btn, 0, wx.ALL|wx.CENTER, 5) 
main_sizer.Add(sizer, 1, wx.ALL|wx.EXPAND, 5)self.panel.SetSizer(main_sizer)

3. 绑定事件函数

下面需要绑定按钮和列表框的点击事件,以执行对应的功能:

self.select_btn.Bind(wx.EVT_BUTTON, self.onSelectFolder) self.zip_list.Bind(wx.EVT_LISTBOX, self.onZipFileSelected)

4. 实现事件函数

选择文件夹按钮的事件处理函数中使用wx.DirDialog来选择文件夹,并保存路径。然后调用方法来列出该路径下的zip文件:

def onSelectFolder(self, event):dialog = wx.DirDialog(self, "Choose folder", style=wx.DD_DEFAULT_STYLE)if dialog.ShowModal() == wx.ID_OK:self.folder_path = dialog.GetPath()self.updateZipFileList()dialog.Destroy()def updateZipFileList(self):self.zip_list.Clear()if self.folder_path:files = os.listdir(self.folder_path)for f in files:if f.endswith('.zip'):self.zip_list.Append(f)

点击zip文件时,会获取选中的文件名,打开zip文件,并列出其中的所有文件名:

def onZipFileSelected(self, event):zip_file = self.zip_list.GetStringSelection() full_path = os.path.join(self.folder_path, zip_file)self.file_list.Clear()with zipfile.ZipFile(full_path) as zf:for info in zf.infolist():self.file_list.Append(info.filename)

5. 运行程序

最后简单创建wx.App和MyFrame对象,启动主循环:

app = wx.App()
frame = MyFrame()
app.MainLoop()

6. 完整代码

import wx
import os
import zipfileclass MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, title="Zip File Viewer")self.panel = wx.Panel(self)self.folder_path = ""self.zip_list = wx.ListBox(self.panel)self.file_list = wx.ListBox(self.panel)self.select_btn = wx.Button(self.panel, label="Select Folder")self.select_btn.Bind(wx.EVT_BUTTON, self.onSelectFolder)sizer = wx.BoxSizer(wx.HORIZONTAL)sizer.Add(self.zip_list, 1, wx.EXPAND)sizer.Add(self.file_list, 1, wx.EXPAND)main_sizer = wx.BoxSizer(wx.VERTICAL)main_sizer.Add(self.select_btn, 0, wx.ALL|wx.CENTER, 5)main_sizer.Add(sizer, 1, wx.ALL|wx.EXPAND, 5)self.panel.SetSizer(main_sizer)self.Show()self.zip_list.Bind(wx.EVT_LISTBOX, self.onZipFileSelected)def onSelectFolder(self, event):dialog = wx.DirDialog(self, "Choose folder", style=wx.DD_DEFAULT_STYLE)if dialog.ShowModal() == wx.ID_OK:self.folder_path = dialog.GetPath()self.updateZipFileList()dialog.Destroy()def updateZipFileList(self):self.zip_list.Clear()if self.folder_path:files = os.listdir(self.folder_path)for f in files:if f.endswith('.zip'):self.zip_list.Append(f)def onZipFileSelected(self, event):zip_file = self.zip_list.GetStringSelection()full_path = os.path.join(self.folder_path, zip_file)self.file_list.Clear()with zipfile.ZipFile(full_path) as zf:for info in zf.infolist():self.file_list.Append(info.filename)app = wx.App()
frame = MyFrame()
app.MainLoop()

结果如下
在这里插入图片描述

这就实现了一个简单的文件管理器,可以选择文件夹,显示zip文件,并查看zip内容。wxpython提供了丰富的界面组件和事件绑定机制,使用起来非常方便和高效。

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

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

相关文章

设计模式之工厂模式

简单工厂 由一个工厂生产多个产品。 一般工厂 每个产品都有一个单独的工厂专门生产。 抽象工厂 不同工厂生产不同种类的产品,每个工厂生产的同类产品又可以再次分类。比如一个鼠标工厂和一个键盘工厂,他们可以为不同的品牌生产鼠标和键盘。

CTF流量题解http1.pcapng

使用Wireshark工具打开流量文件http1.pcapng,如下图所示。 在过滤检索栏输入http,wireshark自动进行过滤。 选中其中一条记录后,wireshark 下方显示若干信息。 Frame 81: 925 bytes on wire (7400 bits), 925 bytes captured (7400 bits) …

从数据仓库到数据结构:数据架构的演变之路

在上个世纪,从电子商务巨头到医疗服务机构和政府部门,数据已成为每家组织的生命线。有效地收集和管理这些数据可以为组织提供宝贵的洞察力,以帮助决策,然而这是一项艰巨的任务。 尽管数据很重要,但CIOinsight声称&…

DL_20无线串口模块

今日介绍一块最近入手的无线串口模块,40r左右,精简好用,虽然感觉配置波特率啥的并不智能化,但250米的通信距离还是很顶的!它的升级版甚至有1000米的通信距离(空旷地带) 这篇文章不多讲其余话&am…

【C++】开源:abseil-cpp基础组件库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍abseil-cpp基础组件库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#…

什么,你说你不会通过jdbc一次性创建10个数据库???

小朋友你是否有很多问号???????????? 1、在资源文件中建一个文件,填入连接数据库的基本信息。 2、通过反射拿到资源文件。…

数据库新闻速递 -- POSTGRESQL 正在蚕食数据库市场 (翻译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群&#xff…

机器学习笔记 - 使用 YOLOv5、O​​penCV、Python 和 C++ 检测物体

一、YOLO v5简述 YOLO v5虽然已经不是最先进的对象检测器,但是YOLOv5 使用了一个简单的卷积神经网络 CNN架构(相对YOLO v8来讲,不过v8精度是更高了一些),更易理解。这里主要介绍如何轻松使用 YOLO v5来识别图像中的对象。将使用 OpenCV、Python 和 C++ 来加载和调用我们的…

K8S系列文章之 一键部署K8S环境

部署的原理是基于自动化部署工具 Ansible 实现的,需要提前安装Ansible 并配置下主机节点环境 1. 安装 Ansible 首先ansible基于python2.X 环境,默认centos都已经安装好了python2环境 // 最好更新下库 // yum update yum install -y epel-release yum i…

flask使用cookie (设置cookie与查看cookie内容)

1.flask包cookie的使用 设置cookie app.route(/set_cookie) def set_cookie():resp make_response(Setting cookie)resp.set_cookie(username, John)return resp查看cookie: app.route(/get_cookie) def get_cookie():username request.cookies.get(username)return Welco…

Spring系列四:AOP切面编程

文章目录 💗AOP-官方文档🍝AOP 讲解🍝AOP APIs 💗动态代理🍝初始动态代理🍝动态代理深入🍝AOP问题提出📗使用土方法解决📗 对土方法解耦-开发最简单的AOP类📗…

木马免杀(篇二)shellcode 学习

木马免杀(篇二)shellcode 学习 —— shellcode介绍 shellcode 是一段利用软件漏洞进行执行的机器码, 通常用汇编语言编写并被翻译为十六进制操作码,因常被攻击者用于获取系统的命令终端shell 接口,所以被称为 shellc…

并发编程面试题2

并发编程面试题2 一、AQS高频问题: 1.1 AQS是什么? AQS就是一个抽象队列同步器,abstract queued sychronizer,本质就是一个抽象类。 AQS中有一个核心属性state,其次还有一个双向链表以及一个单项链表。 首先state…

【Ubuntu】安装docker,docker compose 以及部署一个docker应用

大家好!在过去,已经分享了很多有关通过Docker部署应用的内容。今天,我将为大家详细介绍如何在Ubuntu系统上部署最新的Docker平台。 Docker是什么 Docker是一个开源的容器化平台,它允许您将应用程序及其所有依赖项打包到称为容器…

CH343 USB转串口芯片资料下载(合集)

1、产品手册 CH343DS1.PDF - 南京沁恒微电子股份有限公司CH343技术手册,USB转单串口芯片,支持最高6M波特率,串口信号支持1.8~5V,内置晶振。CH343使用系统集成的CDC驱动或厂商驱动。厂商驱动支持完整串口功能和更高波特率。https:…

基于STM32微控制器的物联网(IoT)节点设计与实现

基于STM32微控制器的物联网(IoT)节点的设计和实现。我们讨论物联网节点的基本概念和功能,并详细介绍了STM32微控制器的特点和优势。然后,我们将探讨如何使用STM32开发环境和相关的硬件模块来设计和实现一个完整的物联网节点。最后,我们将提供一个示例代码,展示如何在STM3…

【24择校指南】南京大学计算机考研考情分析

南京大学(A) 考研难度(☆☆☆☆☆) 内容:23考情概况(拟录取和复试分数人数统计)、院校概况、23初试科目、23复试详情、参考书目、各科目考情分析、各专业考情分析。 正文2178字,预计阅读:6分…

Mr. Cappuccino的第59杯咖啡——简单手写SpringIOC框架

简单手写SpringIOC框架 环境搭建基于XML方式项目结构项目代码运行结果 基于注解方式项目结构项目代码运行结果 简单手写SpringIOC框架核心原理基于XML方式原理项目结构项目代码运行结果 基于注解方式原理项目结构项目代码运行结果 环境搭建 基于XML方式 项目结构 项目代码 p…

JSP实训项目设计报告—MVC简易购物商城

JSP实训项目设计报告—MVC简易购物商城 文章目录 JSP实训项目设计报告—MVC简易购物商城设计目的设计要求设计思路系统要求单点登录模块商品展示模块购物车展示模块 概要设计Model层View层Controller层 详细设计Model层View层登录界面系统主界面 Controller层 系统运行效果项目…

kafka是有序的吗?如何保证有序?

首先,Kafka无法保证消息的全局有序性,这是因为Kafka的设计中允许多个生产者并行地向同一个主题写入消息。而且,一个主题可能会被划分为多个分区,每个分区都可以在独立的生产者和消费者之间进行并行处理。因此,生产者将…