一、前言
1.开发背景
在测试工具的开发里,检索功能是最基础的功能之一了,比如在现在很多的新能源车企中,需要给新的整车版本去跑大量的路试,来发现更多的软件问题,分析软件问题就需要大量的日志数据,这就需要一款对这些日志数据进行分析的工具,来实现日志数据的获取、打包、上传、分析等。而我们今天所要实现的功能就是日志数据的获取,也即本地日志文件的上传。
2.开发环境
- Pycharm + PyQt5
- 使用的PyQt5的相关库:QApplication,QWidget, QVBoxLayout, QPushButton, QTextEdit,QFileDialog,zipfile
二、程序编写
1.引入库
代码如下:
import sys
import zipfile
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QTextEdit, QFileDialog
import os
2.主程序
代码如下:
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.select_button = None
self.textedit = None
self.setWindowTitle('测试程序')
self.setGeometry(300, 300, 400, 300)
self.desktop_display()
def desktop_display(self):
v_layout = QVBoxLayout()
# 创建一个展示框
self.textedit = QTextEdit()
# 设置展示框为只读模式
self.textedit.setReadOnly(True)
# 创建一个选择文件的按钮
self.select_button = QPushButton('选取文件')
# 将展示框和按钮添加到垂直布局管理器中
v_layout.addWidget(self.textedit)
v_layout.addWidget(self.select_button)
# 将垂直布局管理器设置为中央控件
self.setLayout(v_layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.页面效果
4.添加选取文件函数
代码如下:
def select_file(self):
# 创建一个option对象,用来控制文件对话框的行为
options = QFileDialog.Options()
# 弹出一个文件选择对话框,getOpenFileName()函数中参数含义(self, 对话框的标题, 默认打开目录, 显示所有文件类型, 将创建的option对象传进函数)
file_name, _ = QFileDialog.getOpenFileName(self, '选取文件', 'D:/', 'All Files (*)', options=options)
# 判断是否选择了文件
if file_name:
try:
# 获取选择文件的大小
file_size = os.path.getsize(file_name)
# 判断选择的文件是否为压缩包
if zipfile.is_zipfile(file_name):
# 用只读模式打开选择的压缩包,并赋值给zip_ref
with zipfile.ZipFile(file_name, 'r') as zip_ref:
# 获取压缩包里的文件列表
file_list = zip_ref.namelist()
# 将结果展示在展示框中
self.text_edit.append(f'已选择压缩包:{file_name}, 文件大小:{file_size} 字节, 压缩包里的内容列表:{file_list}')
else:
self.text_edit.append(f'已选择文件:{file_name}, 文件大小:{file_size} 字节')
except Exception as e:
self.text_edit.append(f'处理文件 {file_name} 时出现错误:{str(e)}')
函数实现过程中,对python中上下文管理语句结构with…as…有了一个新的认知,以往的认知都是with open as的用法,属实见识短了,本文中让它返回了一个zip文件上下文管理器对象,从而实现后面去获取压缩包内的文件列表,显示在展示框内
5.按钮与函数建立连接
self.select_button.clicked.connect(self.select_file)
总结
以上是我学习掌握的第一个PyQt5程序,实现了文件的选取,对文件大小、类型进行判断并展示,代码编写过程中学习到了很多,多多练习,期望自己的代码能力可以一点一点的提升