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

news2025/2/8 4:51:11

使用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 zipfile

class 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.coloradmin.cn/o/865013.html

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

相关文章

【C++面向对象】--- 继承 的奥秘(上篇)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

git强推覆盖其他项目分支

git强推分支,覆盖其他分支; 操作: 下载branch-1.3代码; $ git clone gitlabgitlab.zte.net:zte-dba-service/branch.git $ git remote add origin2 gitlabgitlab.zte.net:zte-service/branch.git $ git push origin2 master -f注…

UE 5 GAS 在项目中处理AttributeSet相关

这一篇文章是个人的实战经验记录,如果对基础性的内容不了解的,可以看我前面一篇文章对基础的概念以及内容的讲解。 设置AttributeSet 使用GAS之前,首先需要设置参数集AS,这个是用于同步的一些参数,至于如何设置GAS&a…

腾讯云Linux服务器创建、使用和配置的教程

腾讯云Linux服务器创建,先注册腾讯云账号,购买云服务器配置然后选择Linux镜像操作系统,包括云服务器地域、CVM实例、公网IP等配置,然后远程链接到腾讯云服务器快速配置使用教程: 目录 腾讯云Linux服务器创建 创建Li…

远程控制医疗行业应用解析:如何满足医院合规需求?

远程控制医疗行业应用解析:如何满足医院合规需求? 作为一个起源于IT行业的技术,以远程桌面为基础的远程控制技术目前在医疗领域也已经有了比较广阔的应用前景,尤其是在医疗数字化系统/设备的远程运维场景,已经有了一些…

Spring Profile与PropertyPlaceholderConfigurer实现项目多环境配置切换

最近考虑项目在不同环境下配置的切换,使用profile注解搭配PropertyPlaceholderConfigurer实现对配置文件的切换,简单写了个demo记录下实现。 基本知识介绍 Profile Profile通过对bean进行修饰,来限定spring在bean管理时的初始化情况&#…

K8S调度

K8S调度 一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件,apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略 预选策略/预算策略:通过调度算法过滤掉不满足条件…

CH344Q/L USB转四串口芯片资料下载(合集)

1、产品手册 CH344DS1.PDF - 南京沁恒微电子股份有限公司CH344技术手册,USB转4串口芯片,支持最高6M波特率与硬件流控,支持USB配置功能,提供RS485方向控制与GPIO等信号引脚,可实现PC等平台扩展多串口或多个串口设备升级…

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab基于ZOA-CNN-BiGRU-Attention斑马优化卷积双向门控循环单元网络…

ARTS 挑战打卡的第7天 --- Ubuntu中的WindTerm如何设置成中文,并且关闭shell中Tab键声音(Tips)

前言 (1)Windterm是一个非常优秀的终端神器。关于他的下载我就不多说了,网上很多。今天我就分享一个国内目前没有找到的这方面的资料——Ubuntu中的WindTerm如何设置成中文,并且关闭shell中Tab键声音。 将WindTerm设置成中文 &…

Markdown的简单语法学习

简单掌握Markdown语法: 1、标题: 如果一段文字被定义为标题,只要在这段文字前面加#即可。 # 一级标题 ## 二级标题 ### 三级标题 2、列表: 列表分有序列表和无序列表: ###### 无序列表 * 1 * 2 * 3- 1 - 2 - 3#####…

echarts饼图例子

效果 代码&#xff1a;index。vue <div class"riskStatisticsBox"><div class"titleBox">风险统计</div><div class"contentBox"><div class"selectGroupBox"><div class"categoryBox">…

Vc - Qt - 绘制窗口背景色

要在Qt中绘制一个背景颜色&#xff0c;你可以使用Qt的绘图功能来完成。下面是一种简单的方法&#xff1a; 步骤1&#xff1a;在你想要绘制背景颜色的QWidget&#xff08;例如QMainWindow或QDialog&#xff09;的派生类中&#xff0c;重写 它的paintEvent函数。步骤2&#xff1a…

模拟信号和数字信号的转换

此文章介绍的模拟信号与数字信号转换相关的知识有如下&#xff1a; 通信原理的PCM脉冲编码调制 数字电子技术的A/D与D/A 以及stm32的ADC与DAC 模拟信号是指-----时间和数值均连续变化的电信号&#xff0c;如正弦波、三角波等。 数字信号是指-----在时间上和数值上均是离散的…

antv l7每次刷新无法加载iconFont

如图&#xff0c;只渲染出了文本&#xff0c;未渲染出iconFont 但是如果我跳转到其他页面再跳转回来(未经过刷新时)&#xff0c;可以展示出iconFont 解决&#xff1a; 查看官方源码后 找到了iconfont.tsx文件 可以看到多了一步font loaded&#xff0c; 放到项目中后再次测试&…

【01】基础知识:typescript安装及使用,开发工具vscode配置

一、typescript 了解 typeScript 是由微软开发的一款开源的编程语言。 typeScript 是 javascript 的超级&#xff0c;遵循最新的 es6、es5规范。 typeScript 扩展了 javaScript 的语法。 typeScript 更像后端 java、C# 这样的面向对象语言&#xff0c;可以让 js 开发大型企…

全球与中国工程机械轮胎市场现状及未来发展趋势

工程机械轮胎是装于专用性作业的工程机械车辆上&#xff0c;例如装载机、推土机、挖掘机、平整土地机、压路机和石方作业机等。行驶速度不高&#xff0c;但使用的路面条件和载荷性能要求苛刻。 工程机械轮胎行业目前现状分析 轮胎主要采用斜交和子午结构&#xff0c;从轮胎断面…

力扣1137.第N个泰波那契数(动态规划)

/*** author Limg* date 2023/08/11* 泰波那契序列 Tn 定义如下&#xff1a; * T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2* 给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 */ #include<iostream> using namespace std; int tribonacci…

Java 包装类(Wrapper)

Wrapper概念 Java是一个面向对象的编程语言&#xff0c;但是Java中的八种基本数据类型却是不面向对象的&#xff0c;为了使用方便和解决这个不足&#xff0c;在设计类时为每个基本数据类型设计了一个对应的类进行代表&#xff0c;这样八种基本数据类型对应的类统称为包装类(Wra…

Android中Matrix的简单使用

Android中Matrix的简单使用 1.简介&#xff1a; Matrix 是一款微信研发并日常使用的应用性能接入框架&#xff0c;支持iOS, macOS和Android。 Matrix 通过接入各种性能监控方案&#xff0c;对性能监控项的异常数据进行采集和分析&#xff0c;输出相应的问题分析、定位与优化建…