使用python编程的视频文件列表应用程序

news2024/11/28 8:39:46

简介:

在本篇博客中,我们将介绍一个基于 wxPython 的视频文件列表应用程序。该应用程序允许用户选择一个文件夹,并显示该文件夹中的视频文件列表。用户可以选择文件并查看其详细信息,导出文件列表为文本文件,以及播放选定的视频文件。
D:\spiderdocs\search’mediafileinfolder.py

开发环境和所需库

在开始之前,请确保已安装以下库:

  • Python 3.x
  • wxPython

你可以使用以下命令来安装 wxPython:

pip install wxPython

应用程序功能

该应用程序具有以下主要功能:

  1. 选择文件夹:用户可以通过点击 “选择路径” 按钮来选择要显示视频文件的文件夹。

  2. 显示文件列表:选择文件夹后,程序将显示该文件夹中的视频文件列表,包括文件名、大小和修改时间。

  3. 查看文件信息:用户可以选择文件,并点击 “文件信息” 按钮来查看选定文件的详细信息,包括文件名、大小和修改时间。

  4. 导出文件列表:用户可以点击 “导出为文本” 按钮将文件列表导出为文本文件。

  5. 播放视频文件:用户可以选择一个视频文件,并点击 “播放” 按钮来播放选定的视频文件。根据操作系统的不同,将使用不同的命令来打开文件。

代码实现

以下是基于 wxPython 的视频文件列表应用程序的代码实现:

# 导入所需库
import wx
import os
import datetime
import subprocess
import sys

# 定义主窗口类
class FileListFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="视频文件列表", size=(600, 400))

        self.panel = wx.Panel(self)
        self.current_path = ""

        # 创建文件列表控件
        self.file_list_ctrl = wx.ListCtrl(self.panel, style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
        self.file_list_ctrl.InsertColumn(0, "文件名")
        self.file_list_ctrl.InsertColumn(1, "大小")
        self.file_list_ctrl.InsertColumn(2, "修改时间")
        self.file_list_ctrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_file_selected)

        # 创建路径选择控件
        self.path_label = wx.StaticText(self.panel, label="路径:")
        self.path_textctrl = wx.TextCtrl(self.panel, style=wx.TE_READONLY)
        self.path_button = wx.Button(self.panel, label="选择路径")
        self.path_button.Bind(wx.EVT_BUTTON, self.on_select_path)

        # 创建导出和播放按钮
        self.export_button = wx.Button(self.panel, label="导出为文本")
        self.export_button.Bind(wx.EVT_BUTTON, self.on_export)

        self.play_button = wx.Button(self.panel, label="播放")
        self.play_button.Bind(wx.EVT_BUTTON, self.on_play)

        # 创建布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.path_label, 0, wx.ALL, 5)
        sizer.Add(self.path_textctrl, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 5)
        sizer.Add(self.path_button, 0, wx.ALL, 5)
        sizer.Add(self.file_list_ctrl, 1, wx.EXPAND | wx.ALL, 5)
        sizer.Add(self.export_button, 0, wx.ALL, 5)
        sizer.Add(self.play_button, 0, wx.ALL, 5)
        self.panel.SetSizer(sizer)

    # 处理选择路径事件
    def on_select_path(self, event):
        dlg = wx.DirDialog(self, "选择路径", style=wx.DD_DEFAULT_STYLE)
        if dlg.ShowModal() == wx.ID_OK:
            self.current_path = dlg.GetPath()
            self.path_textctrl.SetValue(self.current_path)
            self.update_file_list()
        dlg.Destroy()

    # 更新文件列表
    def update_file_list(self):
        self.file_list_ctrl.DeleteAllItems()

        if not self.current_path:
            return

        file_list = self.search_video_files(self.current_path)
        for filename, file_path, file_size, modified_time in file_list:
            modified_time_str = datetime.datetime.fromtimestamp(modified_time).strftime("%Y-%m-%d %H:%M:%S")

            index = self.file_list_ctrl.InsertItem(self.file_list_ctrl.GetItemCount(), filename)
            self.file_list_ctrl.SetItem(index, 1, str(file_size))
            self.file_list_ctrl.SetItem(index, 2, modified_time_str)

    # 搜索视频文件
    def search_video_files(self, directory):
        video_extensions = ['.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv', '.webm']
        file_list = []

        for root, dirs, files in os.walk(directory):
            for file in files:
                if os.path.splitext(file)[1].lower() in video_extensions:
                    file_path = os.path.join(root, file)
                    file_size = os.path.getsize(file_path)
                    modified_time = os.path.getmtime(file_path)
                    file_list.append((file, file_path, file_size, modified_time))

        return file_list

    # 处理文件选择事件
    def on_file_selected(self, event):
        selected_item = event.GetItem()
        file_name = selected_item.GetText()
        file_path = os.path.join(self.current_path, file_name)
        file_size = os.path.getsize(file_path)
        modified_time = os.path.getmtime(file_path)
        modified_time_str = datetime.datetime.fromtimestamp(modified_time).strftime("%Y-%m-%d %H:%M:%S")

        wx.MessageBox(
            f"文件名: {file_name}\n大小: {file_size} 字节\n修改时间: {modified_time_str}",
            "文件信息", wx.OK | wx.ICON_INFORMATION)

    # 处理导出按钮事件
    def on_export(self, event):
        dlg = wx.FileDialog(self, "保存为文本文件", wildcard="Text files (*.txt)|*.txt",
                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

        if dlg.ShowModal() == wx.ID_OK:
            file_path = dlg.GetPath()
            with open(file_path, 'w') as file:
                for index in range(self.file_list_ctrl.GetItemCount()):
                    file.write(self.file_list_ctrl.GetItemText(index) + '\n')

    # 处理播放按钮事件
    def on_play(self, event):
        selected_item = self.file_list_ctrl.GetFirstSelected()
        if selected_item != -1:
            file_name = self.file_list_ctrl.GetItemText(selected_item)
            file_path = os.path.join(self.current_path, file_name)
            if sys.platform.startswith('win'):
                subprocess.Popen(['start', '', file_path], shell=True)
            elif sys.platform.startswith('darwin'):
                subprocess.Popen(['open', file_path])
            elif sys.platform.startswith('linux'):
                subprocess.Popen(['xdg-open', file_path])
        else:
            wx.MessageBox("请先选择要播放的文件", "提示", wx.OK | wx.ICON_INFORMATION)


# 主函数
if __name__ == "__main__":
    app = wx.App()
    frame = FileListFrame()
    frame.Show()
    app.MainLoop()

运行和使用

要运行该应用程序,请确保已安装了所需的库,并使用 Python 解释器运行代码。应用程序窗口将显示,您可以点击 “选择路径” 按钮选择文件夹,并查看视频文件列表。您可以选择文件并点击 “文件信息” 按钮来查看文件的详细信息。您还可以点击 “导出为文本” 按钮将文件列表导出为文本文件。要播放选定的视频文件,请选择文件并点击 “播放” 按钮。

总结

本篇博客介绍了一个基于 wxPython 的视频文件列表应用程序。通过选择文件夹,用户可以查看文件夹中的视频文件列表,并执行操作,如查看文件信息、导出文件列表和播放视频文件。使用 wxPython 和 Python 的强大功能,我们可以轻松地创建功能丰富的桌面应用程序。

希望本篇博客对于学习 wxPython 和构建桌面应用程序有所帮助。祝您编写出出色的应用程序!标题: 基于 wxPython 的视频文件列表应用程序


简介:

在本篇博客中,我们将介绍一个基于 wxPython 的视频文件列表应用程序。该应用程序允许用户选择一个文件夹,并显示该文件夹中的视频文件列表。用户可以选择文件并查看其详细信息,导出文件列表为文本文件,以及播放选定的视频文件。

开发环境和所需库

在开始之前,请确保已安装以下库:

  • Python 3.x
  • wxPython

你可以使用以下命令来安装 wxPython:

pip install wxPython

应用程序功能

该应用程序具有以下主要功能:

  1. 选择文件夹:用户可以通过点击 “选择路径” 按钮来选择要显示视频文件的文件夹。

  2. 显示文件列表:选择文件夹后,程序将显示该文件夹中的视频文件列表,包括文件名、大小和修改时间。

  3. 查看文件信息:用户可以选择文件,并点击 “文件信息” 按钮来查看选定文件的详细信息,包括文件名、大小和修改时间。

  4. 导出文件列表:用户可以点击 “导出为文本” 按钮将文件列表导出为文本文件。

  5. 播放视频文件:用户可以选择一个视频文件,并点击 “播放” 按钮来播放选定的视频文件。根据操作系统的不同,将使用不同的命令来打开文件。

代码实现

以下是基于 wxPython 的视频文件列表应用程序的代码实现:

import wx
import os
import datetime
import subprocess
import sys


class FileListFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="视频文件列表", size=(600, 400))

        self.panel = wx.Panel(self)
        self.current_path = ""

        self.file_list_ctrl = wx.ListCtrl(self.panel, style=wx.LC_REPORT | wx.LC_SINGLE_SEL)
        self.file_list_ctrl.InsertColumn(0, "文件名")
        self.file_list_ctrl.InsertColumn(1, "大小")
        self.file_list_ctrl.InsertColumn(2, "修改时间")
        self.file_list_ctrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.on_file_selected)

        self.path_label = wx.StaticText(self.panel, label="路径:")
        self.path_textctrl = wx.TextCtrl(self.panel, style=wx.TE_READONLY)
        self.path_button = wx.Button(self.panel, label="选择路径")
        self.path_button.Bind(wx.EVT_BUTTON, self.on_select_path)

        self.export_button = wx.Button(self.panel, label="导出为文本")
        self.export_button.Bind(wx.EVT_BUTTON, self.on_export)

        self.play_button = wx.Button(self.panel, label="播放")
        self.play_button.Bind(wx.EVT_BUTTON, self.on_play)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.path_label, 0, wx.ALL, 5)
        sizer.Add(self.path_textctrl, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 5)
        sizer.Add(self.path_button, 0, wx.ALL, 5)
        sizer.Add(self.file_list_ctrl, 1, wx.EXPAND | wx.ALL, 5)
        sizer.Add(self.export_button, 0, wx.ALL, 5)
        sizer.Add(self.play_button, 0, wx.ALL, 5)
        self.panel.SetSizer(sizer)

    def on_select_path(self, event):
        dlg = wx.DirDialog(self, "选择路径", style=wx.DD_DEFAULT_STYLE)
        if dlg.ShowModal() == wx.ID_OK:
            self.current_path = dlg.GetPath()
            self.path_textctrl.SetValue(self.current_path)
            self.update_file_list()
        dlg.Destroy()

    def update_file_list(self):
        self.file_list_ctrl.DeleteAllItems()

        if not self.current_path:
            return

        file_list = self.search_video_files(self.current_path)
        for filename, file_path, file_size, modified_time in file_list:
            modified_time_str = datetime.datetime.fromtimestamp(modified_time).strftime("%Y-%m-%d %H:%M:%S")

            index = self.file_list_ctrl.InsertItem(self.file_list_ctrl.GetItemCount(), filename)
            self.file_list_ctrl.SetItem(index, 1, str(file_size))
            self.file_list_ctrl.SetItem(index, 2, modified_time_str)

    def search_video_files(self, directory):
        video_extensions = ['.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv', '.webm']
        file_list = []

        for root, dirs, files in os.walk(directory):
            for file in files:
                if os.path.splitext(file)[1].lower() in video_extensions:
                    file_path = os.path.join(root, file)
                    file_size = os.path.getsize(file_path)
                    modified_time = os.path.getmtime(file_path)
                    file_list.append((file, file_path, file_size, modified_time))

        return file_list

    def on_file_selected(self, event):
        selected_item = event.GetItem()
        file_name = selected_item.GetText()
        file_path = os.path.join(self.current_path, file_name)
        file_size = os.path.getsize(file_path)
        modified_time = os.path.getmtime(file_path)
        modified_time_str = datetime.datetime.fromtimestamp(modified_time).strftime("%Y-%m-%d %H:%M:%S")

        wx.MessageBox(
            f"文件名: {file_name}\n大小: {file_size} 字节\n修改时间: {modified_time_str}",
            "文件信息", wx.OK | wx.ICON_INFORMATION)

    def on_export(self, event):
        dlg = wx.FileDialog(self, "保存为文本文件", wildcard="Text files (*.txt)|*.txt",
                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

        if dlg.ShowModal() == wx.ID_OK:
            file_path = dlg.GetPath()
            with open(file_path, 'w') as file:
                for index in range(self.file_list_ctrl.GetItemCount()):
                    file.write(self.file_list_ctrl.GetItemText(index) + '\n')

    def on_play(self, event):
        selected_item = self.file_list_ctrl.GetFirstSelected()
        # if selected_item != -很抱歉,似乎代码截断了。以下是在 `on_play` 方法中的代码:


        if selected_item != -1:
            file_name = self.file_list_ctrl.GetItemText(selected_item)
            file_path = os.path.join(self.current_path, file_name)
            if sys.platform.startswith('win'):
                subprocess.Popen(['start', '', file_path], shell=True)
            elif sys.platform.startswith('darwin'):
                subprocess.Popen(['open', file_path])
            elif sys.platform.startswith('linux'):
                subprocess.Popen(['xdg-open', file_path])
        else:
            wx.MessageBox("请先选择要播放的文件", "提示", wx.OK | wx.ICON_INFORMATION)


if __name__ == "__main__":
    app = wx.App()
    frame = FileListFrame()
    frame.Show()
    app.MainLoop()

运行和使用

要运行该应用程序,请确保已安装了所需的库,并使用 Python 解释器运行代码。应用程序窗口将显示,您可以点击 “选择路径” 按钮选择文件夹,并查看视频文件列表。您可以选择文件并点击 “文件信息” 按钮来查看文件的详细信息。您还可以点击 “导出为文本” 按钮将文件列表导出为文本文件。要播放选定的视频文件,请选择文件并点击 “播放” 按钮。

结果如下:

在这里插入图片描述

总结

本篇博客介绍了一个基于 wxPython 的视频文件列表应用程序。通过选择文件夹,用户可以查看文件夹中的视频文件列表,并执行操作,如查看文件信息、导出文件列表和播放视频文件。使用 wxPython 和 Python 的强大功能,我们可以轻松地创建功能丰富的桌面应用程序。

希望本篇博客对于学习 wxPython 和构建桌面应用程序有所帮助。祝您编写出出色的应用程序!

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

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

相关文章

Python酷库之旅-第三方库Pandas(008)

目录 一、用法精讲 16、pandas.DataFrame.to_json函数 16-1、语法 16-2、参数 16-3、功能 16-4、返回值 16-5、说明 16-6、用法 16-6-1、数据准备 16-6-2、代码示例 16-6-3、结果输出 17、pandas.read_html函数 17-1、语法 17-2、参数 17-3、功能 17-4、返回值…

68.WEB渗透测试-信息收集- WAF、框架组件识别(8)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:67.WEB渗透测试-信息收集- WAF、框架组件识别(7) 右边这些是waf的…

C++ | Leetcode C++题解之第217题存在重复元素

题目&#xff1a; 题解&#xff1a; class Solution { public:bool containsDuplicate(vector<int>& nums) {unordered_set<int> s;for (int x: nums) {if (s.find(x) ! s.end()) {return true;}s.insert(x);}return false;} };

R语言fastshap包进行支持向量机shap可视化分析

1995年VAPINK 等人在统计学习理论的基础上提出了一种模式识别的新方法—支持向量机 。它根据有限的样本信息在模型的复杂性和学习能力之间寻求一种最佳折衷。 以期获得最好的泛化能力.支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部极小值,从而也保证了它对未知…

揭秘Conda:Python开发者必备的包管理神器

conda 简介 Conda 是一个开源的包管理系统和环境管理系统&#xff0c;用于安装和管理软件包以及创建和维护不同的软件环境。 它最初是为 Python 语言设计的&#xff0c;但现在已经支持多种编程语言&#xff0c;包括 R、Ruby、Lua、Scala 等。 1、Anaconda&#xff1a;是一个…

041基于SSM+Jsp的高校校园点餐系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

在pycharm中使用jupyter

在pycharm中使用jupyter 前置条件&#xff1a;你的环境中应该有juptyer &#xff0c;没有的话 pip install jupyter 点击项目目录&#xff0c;右键->new->jupyter notebook 打开file settings 找到 jupyter server &#xff08;按照默认的用代理服务器就行&#xff09; P…

整洁架构SOLID-单一职责原则(SRP)

文章目录 定义案例分析重复的假象代码合并解决方案 小结 定义 SRP是SOLID五大设计原则中最容易被误解的一个。也许是名字的原因&#xff0c;很多程序员根据SRP这个名字想当然地认为这个原则就是指&#xff1a;每个模块都应该只做一件事。 在历史上&#xff0c;我们曾经这样描…

全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则,Python模拟主机和传感器自定义类

全网最适合入门的面向对象编程教程&#xff1a;10 类和对象的 Python 实现-类的继承和里氏替换原则&#xff0c;Python 模拟主机和传感器自定义类 摘要&#xff1a; 本文主要介绍了类的继承的基本概念和里氏替换原则&#xff0c;以模拟传感器数据串口输出-上位机串口接收为例…

Python结合MobileNetV2:图像识别分类系统实战

一、目录 算法模型介绍模型使用训练模型评估项目扩展 二、算法模型介绍 图像识别是计算机视觉领域的重要研究方向&#xff0c;它在人脸识别、物体检测、图像分类等领域有着广泛的应用。随着移动设备的普及和计算资源的限制&#xff0c;设计高效的图像识别算法变得尤为重要。…

【反悔贪心 反悔堆】1642. 可以到达的最远建筑

本文涉及知识点 反悔贪心 反悔堆 LeetCode1642. 可以到达的最远建筑 给你一个整数数组 heights &#xff0c;表示建筑物的高度。另有一些砖块 bricks 和梯子 ladders 。 你从建筑物 0 开始旅程&#xff0c;不断向后面的建筑物移动&#xff0c;期间可能会用到砖块或梯子。 当…

AJAX-个人版-思路步骤整理版

前置知识&#xff1a;老式的web创建工程方法就是创建项目然后添加web工件&#xff0c;然后添加lib依赖如&#xff1a;tomcat,servlet&#xff0c;等。 传统请求 对于传统请求操作&#xff1a;整体流程也就是创建静态页面&#xff0c; <!DOCTYPE html> <html lang&q…

秋招突击——7/6——复习{前K个高频元素}——新作{数据流的中位数、有效括号、最小栈、字符串解码}

文章目录 引言复习前K个高频元素——使用堆去做个人实现参考官方——使用堆实现定义优先队列的基本方式 新作数据流的中位数个人实现参考做法 有效括号个人实现参考实现 最小栈个人实现参考实现 字符串解码个人实现参考实现 总结 引言 差不多摆烂了一上午&#xff0c;本来今天…

摸鱼大数据——Spark SQL——基本介绍和入门案例

Spark SQL 基本介绍 1、什么是Spark SQL Spark SQL是Spark多种组件中其中一个&#xff0c;主要是用于处理大规模的【结构化数据】 什么是结构化数据: 一份数据, 每一行都有固定的列, 每一列的类型都是一致的 我们将这样的数据称为结构化的数据例如: mysql的表数据1 张三 202 …

筛选Github上的一些优质项目

每个项目旁都有标签说明其特点&#xff0c;如今日热捧、多模态、收入生成、机器人、大型语言模型等。 项目涵盖了不同的编程语言和领域&#xff0c;包括人工智能、语言模型、网页数据采集、聊天机器人、语音合成、AI 代理工具集、语音转录、大型语言模型、DevOps、本地文件共享…

考虑数据库粒度的设计-提升效率

目录 概要 场景 设计思路 小结 概要 公开的资料显示&#xff0c;数据库粒度是&#xff1a;“在数据库领域&#xff0c;特别是数据仓库的设计中&#xff0c;粒度是一个核心概念&#xff0c;它直接影响到数据分析的准确性和存储效率。粒度的设定涉及到数据的详细程度和精度&…

哈弗架构和冯诺伊曼架构

文章目录 1. 计算机体系结构 2. 哈弗架构&#xff08;Harvard Architecture&#xff09; 3. 改进的哈弗架构 4. 冯诺伊曼架构&#xff08;Von Neumann Architecture&#xff09; 5. 结构对比 1. 计算机体系结构 计算机体系结构是指计算机系统的组织和实现方式&#xff0c…

Tabu Search — 温和介绍

Tabu Search — 温和介绍 目录 Tabu Search — 温和介绍 一、说明 二、什么是禁忌搜索以及我可以在哪里使用它&#xff1f; 三、禁忌搜索原则 四、短期记忆和积极搜索&#xff1a; 五、举例时间 六、结论&#xff1a; 七、参考&#xff1a; 一、说明 最近&#xff0c;我参加了…

《向量数据库指南》——Milvus Cloud检索器增强的深度探讨:句子窗口检索与元数据过滤

检索器增强的深度探讨&#xff1a;句子窗口检索与元数据过滤 在信息爆炸的时代&#xff0c;高效的检索系统成为了连接用户与海量数据的关键桥梁。为了进一步提升检索的准确性和用户满意度&#xff0c;检索器增强技术应运而生&#xff0c;其中句子窗口检索与元数据过滤作为两大…

coco数据集格式计算mAP的python脚本

目录 背景说明COCOeval 计算mAPtxt文件转换为coco json 格式自定义数据集标注 背景说明 在完成YOLOv5模型移植&#xff0c;运行在板端后&#xff0c;通常需要衡量板端运行的mAP。 一般需要两个步骤 步骤一&#xff1a;在板端批量运行得到目标检测结果&#xff0c;可保存为yol…