You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5实现多文件QTreeView纵向排列展示问题求助

实现多文件树形视图纵向排列展示

核心思路

选择文件夹后,遍历所有.odl文件,创建带滚动区域的容器窗口,将每个文件对应的树形视图(搭配文件标题标签)依次添加到垂直布局中,实现纵向排列展示。

代码修改步骤

  1. 导入文件遍历模块:在start_window.py开头添加文件操作模块,用于筛选文件夹内的目标文件:
import os
# ... 保留原有其他导入代码
  1. 完善choose_folder方法:替换原方法中的占位代码,实现文件筛选、容器窗口创建和多视图布局:
class StartWindow(QDialog):
    # ... 保留原有初始化代码

    def choose_folder(self):
        folder_path = QFileDialog.getExistingDirectory(self, "Open Folder Containing ODL Files")
        if folder_path:
            # 筛选文件夹下所有.odl格式文件(不区分大小写)
            odl_files = []
            for filename in os.listdir(folder_path):
                if filename.lower().endswith('.odl'):
                    odl_files.append(os.path.join(folder_path, filename))
            
            if not odl_files:
                QMessageBox.warning(self, "无ODL文件", "选中的文件夹中未找到ODL格式文件。")
                return
            
            # 创建统一容器窗口展示所有视图
            container_win = QMainWindow()
            container_win.setWindowTitle(f'DM Parsing - 文件夹: {os.path.basename(folder_path)}')
            
            # 配置滚动区域,支持文件过多时滚动查看
            scroll_widget = QWidget()
            scroll_layout = QVBoxLayout(scroll_widget)
            
            scroll_area = QScrollArea()
            scroll_area.setWidgetResizable(True)
            scroll_area.setWidget(scroll_widget)
            container_win.setCentralWidget(scroll_area)
            
            # 逐个添加文件的树形视图
            for file_path in odl_files:
                # 添加文件名称标签,区分不同文件
                file_title = QLabel(f'文件: {os.path.basename(file_path)}')
                file_title.setFont(QFont('微软雅黑', 10, QFont.Bold))
                scroll_layout.addWidget(file_title)
                
                # 创建当前文件的树形视图
                parser = ODLParser(file_path)
                table_view = Table(parser)
                table_view.setMinimumHeight(250)  # 设置最小高度,避免视图过挤
                scroll_layout.addWidget(table_view)
            
            # 添加拉伸项,让最后一个视图下方保留空白
            scroll_layout.addStretch()
            
            container_win.resize(850, 600)
            container_win.show()
  1. 调整Table类(若需适配):如果你的Table类继承自QMainWindow,需要改为继承QWidget,否则无法添加到布局中。修改示例:
# table_view.py中的Table类修改
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QTreeView

class Table(QWidget):
    def __init__(self, parser):
        super().__init__()
        layout = QVBoxLayout(self)
        self.tree_view = QTreeView()
        
        # 原有设置模型、解析数据的代码保持不变
        # 例如:self.tree_view.setModel(parser.get_model())
        
        layout.addWidget(self.tree_view)

效果说明

  • 选择文件夹后自动筛选.odl文件,无匹配文件时弹出提示
  • 每个文件的树形视图上方显示对应文件名,便于区分
  • 窗口内置滚动区域,文件数量较多时可滚动查看
  • 每个视图设置最小高度,避免显示过于紧凑

内容的提问来源于stack exchange,提问作者roua mallek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:16:32