本文将介绍如何使用Python和PyQt5创建一个简单的文件查询工具。该工具允许用户选择一个目录,并在该目录中搜索特定的文件。
依赖库
首先,确保你已经安装了PyQt5库:
pip install PyQt5
步骤
第一步:导入库
我们需要导入必要的库,包括sys
、os
和PyQt5
。
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_())
代码解析
- 导入库:我们导入了
sys
、os
和PyQt5
库。 - 创建主窗口:我们定义了一个
FileSearchApp
类,继承自QMainWindow
,并在其构造函数中设置窗口标题和大小。 - 布局和部件:我们创建了一个主窗口部件
central_widget
,并设置了一个垂直布局QVBoxLayout
。在布局中添加了标签、按钮、输入框和列表框。 - 选择目录:
select_directory
方法使用QFileDialog
让用户选择一个目录,并显示在标签上。 - 搜索文件:
search_files
方法遍历选定目录中的所有文件,如果文件名包含搜索关键词,则将其路径添加到结果列表中。
运行程序
运行上述代码后,你将看到一个窗口,可以选择目录并输入文件名进行搜索,结果将显示在列表中。
效果图:
说明
这个项目展示了如何使用Python和PyQt5创建一个图形用户界面(GUI)应用程序,并实现了基本的文件查询功能。希望这个项目对你有所帮助,并激发你进一步探索和学习更多的编程技巧和项目。继续努力,祝你在编程的旅程中取得更多的成果!
标签:search,layout,Python,self,PyQt5,源码,directory,目录 From: https://blog.csdn.net/m0_74972192/article/details/140834942