pyqt 如何将路径中的文件目录以及文件大小、日期、图标显示在treeWidget中
时间: 2023-11-22 15:55:02 浏览: 98
可以使用QTreeWidgetItem类来向treeWidget中添加节点,每个节点对应一个文件或文件夹。以下是一个简单的示例代码,可以显示指定路径下的所有文件和文件夹的名称、大小、日期和图标。
```python
import os
from PyQt5.QtWidgets import QApplication, QTreeWidgetItem, QTreeWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
class FileTreeWidget(QTreeWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setColumnCount(4) # 设置列数
self.setHeaderLabels(['Name', 'Size', 'Date Modified', 'Type']) # 设置表头
def add_folder(self, folder_path):
folder = QTreeWidgetItem(self, [os.path.basename(folder_path), '', '', 'Folder']) # 创建文件夹节点
folder.setIcon(0, QIcon('folder_icon.png')) # 设置图标
folder.setData(0, Qt.UserRole, folder_path) # 将文件夹路径存储到节点的data中
for filename in os.listdir(folder_path): # 遍历文件夹中的文件和子文件夹
filepath = os.path.join(folder_path, filename)
if os.path.isfile(filepath):
self.add_file(folder, filepath) # 添加文件节点
elif os.path.isdir(filepath):
self.add_folder(filepath) # 递归添加子文件夹
def add_file(self, parent, file_path):
file_info = os.stat(file_path)
file_size = file_info.st_size # 获取文件大小
file_date = file_info.st_mtime # 获取文件修改时间
file_type = os.path.splitext(file_path)[1] # 获取文件扩展名
file_node = QTreeWidgetItem(parent, [os.path.basename(file_path), str(file_size), str(file_date), file_type]) # 创建文件节点
file_node.setIcon(0, QIcon('file_icon.png')) # 设置图标
file_node.setData(0, Qt.UserRole, file_path) # 将文件路径存储到节点的data中
def mouseDoubleClickEvent(self, event):
item = self.currentItem()
if item and item.text(3) == 'Folder':
folder_path = item.data(0, Qt.UserRole) # 获取文件夹路径
self.add_folder(folder_path) # 展开文件夹
else:
file_path = item.data(0, Qt.UserRole) # 获取文件路径
if file_path:
os.startfile(file_path) # 打开文件
if __name__ == '__main__':
app = QApplication([])
tree_widget = FileTreeWidget()
tree_widget.add_folder('C:/Users/')
tree_widget.show()
app.exec_()
```
在上面的代码中,我们继承了QTreeWidget类,并添加了两个方法add_folder和add_file,用于向treeWidget中添加文件夹和文件节点。其中,add_folder方法会递归调用自己来添加子文件夹,add_file方法则会获取文件的大小、日期和类型信息,并创建对应的节点。
为了方便展开文件夹和打开文件,我们还重写了mouseDoubleClickEvent方法,当用户双击节点时,如果是文件夹节点则展开文件夹,如果是文件节点则打开文件。在展开文件夹时,我们将文件夹的路径存储到节点的data中,以便后续获取。
阅读全文