首页 > 编程语言 >使用 Python和PyQt5 打造 你的专属文件查询工具! 附源码

使用 Python和PyQt5 打造 你的专属文件查询工具! 附源码

时间:2024-08-05 16:55:31浏览次数:13  
标签:search layout Python self PyQt5 源码 directory 目录

本文将介绍如何使用Python和PyQt5创建一个简单的文件查询工具。该工具允许用户选择一个目录,并在该目录中搜索特定的文件。

依赖库

首先,确保你已经安装了PyQt5库:

pip install PyQt5

步骤

第一步:导入库

我们需要导入必要的库,包括sysosPyQt5

import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QPushButton, QFileDialog, QLineEdit, QListWidget

解析

  • sys 和 os:用于系统操作和文件操作。
  • PyQt5.QtWidgets:用于创建图形用户界面(GUI)。
第二步:创建主窗口

我们定义一个FileSearchApp类,继承自QMainWindow,并在其构造函数中设置窗口标题和大小。

class FileSearchApp(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("文件查询工具")
        self.setGeometry(100, 100, 600, 400)

解析

  • QMainWindow:PyQt5中的主窗口类。
  • setWindowTitle:设置窗口标题。
  • setGeometry:设置窗口大小和位置。
第三步:创建布局和部件

我们创建一个主窗口部件central_widget,并设置一个垂直布局QVBoxLayout。在布局中添加标签、按钮、输入框和列表框。

        # 创建主窗口部件
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        # 创建布局
        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        # 创建标签和按钮
        self.dir_label = QLabel("选择目录:")
        self.layout.addWidget(self.dir_label)

        self.dir_button = QPushButton("选择目录")
        self.dir_button.clicked.connect(self.select_directory)
        self.layout.addWidget(self.dir_button)

        self.search_label = QLabel("输入文件名:")
        self.layout.addWidget(self.search_label)

        self.search_input = QLineEdit()
        self.layout.addWidget(self.search_input)

        self.search_button = QPushButton("搜索")
        self.search_button.clicked.connect(self.search_files)
        self.layout.addWidget(self.search_button)

        self.result_list = QListWidget()
        self.layout.addWidget(self.result_list)

解析

  • QWidget:PyQt5中的基本窗口部件。
  • QVBoxLayout:垂直布局类。
  • QLabel:标签类。
  • QPushButton:按钮类。
  • QLineEdit:单行文本输入框类。
  • QListWidget:列表框类。
第四步:选择目录

select_directory方法使用QFileDialog让用户选择一个目录,并显示在标签上。

    def select_directory(self):
        directory = QFileDialog.getExistingDirectory(self, "选择目录")
        if directory:
            self.dir_label.setText(f"选择目录: {directory}")
            self.directory = directory

解析

  • QFileDialog.getExistingDirectory:打开目录选择对话框。
  • setText:设置标签文本。
第五步:搜索文件

search_files方法遍历选定目录中的所有文件,如果文件名包含搜索关键词,则将其路径添加到结果列表中。

    def search_files(self):
        self.result_list.clear()
        search_term = self.search_input.text()
        if hasattr(self, 'directory') and search_term:
            for root, dirs, files in os.walk(self.directory):
                for file in files:
                    if search_term in file:
                        self.result_list.addItem(os.path.join(root, file))

解析

  • os.walk:遍历目录树。
  • hasattr:检查对象是否具有某个属性。
  • addItem:向列表框添加项目。

运行程序

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = FileSearchApp()
    main_window.show()
    sys.exit(app.exec_())

解析

  • QApplication:PyQt5应用程序类。
  • sys.argv:命令行参数列表。
  • show:显示窗口。
  • exec_:进入应用程序的主循环。

运行结果

运行上述代码后,你将看到一个窗口,可以选择目录并输入文件名进行搜索,结果将显示在列表中。

完整代码

import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QPushButton, QFileDialog, QLineEdit, QListWidget

class FileSearchApp(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("文件查询工具")
        self.setGeometry(100, 100, 600, 400)

        # 创建主窗口部件
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        # 创建布局
        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        # 创建标签和按钮
        self.dir_label = QLabel("选择目录:")
        self.layout.addWidget(self.dir_label)

        self.dir_button = QPushButton("选择目录")
        self.dir_button.clicked.connect(self.select_directory)
        self.layout.addWidget(self.dir_button)

        self.search_label = QLabel("输入文件名:")
        self.layout.addWidget(self.search_label)

        self.search_input = QLineEdit()
        self.layout.addWidget(self.search_input)

        self.search_button = QPushButton("搜索")
        self.search_button.clicked.connect(self.search_files)
        self.layout.addWidget(self.search_button)

        self.result_list = QListWidget()
        self.layout.addWidget(self.result_list)

    def select_directory(self):
        directory = QFileDialog.getExistingDirectory(self, "选择目录")
        if directory:
            self.dir_label.setText(f"选择目录: {directory}")
            self.directory = directory

    def search_files(self):
        self.result_list.clear()
        search_term = self.search_input.text()
        if hasattr(self, 'directory') and search_term:
            for root, dirs, files in os.walk(self.directory):
                for file in files:
                    if search_term in file:
                        self.result_list.addItem(os.path.join(root, file))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = FileSearchApp()
    main_window.show()
    sys.exit(app.exec_())

代码解析

  1. 导入库:我们导入了 sysos 和 PyQt5 库。
  2. 创建主窗口:我们定义了一个 FileSearchApp 类,继承自 QMainWindow,并在其构造函数中设置窗口标题和大小。
  3. 布局和部件:我们创建了一个主窗口部件 central_widget,并设置了一个垂直布局 QVBoxLayout。在布局中添加了标签、按钮、输入框和列表框。
  4. 选择目录select_directory 方法使用 QFileDialog 让用户选择一个目录,并显示在标签上。
  5. 搜索文件search_files 方法遍历选定目录中的所有文件,如果文件名包含搜索关键词,则将其路径添加到结果列表中。

运行程序

运行上述代码后,你将看到一个窗口,可以选择目录并输入文件名进行搜索,结果将显示在列表中。

效果图:


说明

这个项目展示了如何使用Python和PyQt5创建一个图形用户界面(GUI)应用程序,并实现了基本的文件查询功能。希望这个项目对你有所帮助,并激发你进一步探索和学习更多的编程技巧和项目。继续努力,祝你在编程的旅程中取得更多的成果!

标签:search,layout,Python,self,PyQt5,源码,directory,目录
From: https://blog.csdn.net/m0_74972192/article/details/140834942

相关文章

  • 用Python和PyQt5打造你的专属音乐播放器!轻松创建带封面的音乐列表
    在本文中,我们将介绍如何使用Python的PyQt5库创建一个简单的音乐播放器。这个音乐播放器可以显示歌曲的封面,并且点击封面就可以播放对应的歌曲。依赖库首先,我们需要安装PyQt5库。可以使用以下命令进行安装:pipinstallPyQt5功能如下:显示歌曲列表:程序会在指定的目录(在......
  • 了解 Databricks 文件系统 (DBFS) 中的文件访问与使用 Python 和 Spark 的卷的比较
    我当前正在尝试从Databricks文件系统(DBFS)读取和显示文件,但遇到了问题。这是我使用的代码:file_path="/dbfs/cluster-logs/use_case/default_job_cluster/cluster_id/init_scripts/cluster_id/20240801_proxy-init.sh.stderr.log"withopen(file_path,'r')asfile:......
  • 机器学习用python还是R,哪个更好?
    选择使用Python还是R进行机器学习取决于多个因素,包括您的具体需求、项目要求、个人偏好以及团队的技能水平。以下是一些关键点,可以帮助您做出决定:Python的优势广泛使用:Python是目前最流行的编程语言之一,特别是在数据科学和机器学习领域。它有一个庞大的社区和丰富的资源。......
  • python 元类:在调用“__set_name__”方法后编辑命名空间?
    假设我们用元类定义一个类。在类主体中,分配了对象,这些对象实现__set_name__以在类的数据结构中注册自身。是否可以在运行方法之后编辑命名空间?比如,分离填充的数据结构,将其分成两部分,然后在新属性下添加部分?__set_name__问题在于,在元类中调用之......
  • 无法加入进程,只能终止[Python 3.11,多处理]
    我有一个问题要问对Python的多处理库有更​​多经验的人,此时我几乎迷失了方向。我目前正在构建一个应该在Windows11和Windows11上运行的图像处理应用程序装有DebianLinux的OrangePi5。我的设置是,除了主程序之外,还有另外两个进程,一个用于处理不间断的......
  • Python 将Word转换为JPG、PNG、SVG图片
    将Word文档以图片形式导出,既能方便信息的分享,也能保护数据安全,避免被二次编辑。文本将介绍如何使用 Spire.DocforPython 库在Python程序中实现Word到图片的批量转换。Python将Word转换为JPG、JPEG、PNG、BMP等图片格式Python将Word文档转换为SVG格式 Python库安装: ......
  • C 和 Python 代码的函数的不同十六进制转储值
    这是我的示例C代码,用于从user32.dll中转储MessageBoxA:#include<windows.h>#include<stdio.h>voidDumpFun(HANDLEprocess,LPVOIDaddress,SIZE_Tdump_size){BYTE*buffer=(BYTE*)malloc(dump_size);if(buffer==NULL){pri......
  • 是否有对数累积分布函数 (CDF) 和分位数函数的数值稳定的 Python 实现?
    我正在寻找以下函数的数值稳定实现。由于我的应用涉及t分布,所以我这里以t分布为例。LogCDF#NaivePythonimplementationofthefunctionIneedimportscipyimportnumpyasnpdeft_log_cdf(x,df):p=scipy.stats.t.cdf(x,df=df)returnnp.log(......
  • 如何将 *args 参数作为字符串传递给 Python 函数
    我正在使用pytubefix制作一个Youtube下载器。API允许我编写如下代码:YouTube(url).streams.filter(progressive=True)但是假设我有一个字符串存储在像args="progressive=True"这样的变量中,我如何使用args字符串来调用函数,就像......
  • Python Telegram Bot 从数据库获取数据时出错
    我正在开发用于管理企业用途任务的电报机器人。团队负责人注册他的公司并获得唯一的ID,然后可以分配任务。问题是,当团队负责人分配任务时,他可以使用/viewtasks访问它们。但是,当员工尝试查看任务时,它会打印出“错误。您尚未注册”。似乎无法检索与用户关联的company_id,即使......