Python tkinter树状目录窗口实现

news2024/11/15 5:18:22

通过tkinter GUI实现读取特定目录下所有目录及文件并在窗口中可选择显示。

通过左右布局实现,左侧为树状目录,右侧为输入框和显示文本框。

 

目录

tkinter树状目录

左侧树状目录

右侧显示

调用实现窗口

打开目录

打开py文件 

总结


tkinter树状目录

左侧树状目录

左侧显示分级的文件目录列表,通过选择目录打开其下的目录或文件,

并赋值内容在右侧显示。

示例如下:

import tkinter
from tkinter import ttk
import os


class TreeWin(tkinter.Frame):

    def __init__(self, master, path, otherWin):
        frame = tkinter.Frame(master)
        frame.grid(row=0, column=0)

        # 绑定infoWin
        self.otherWin = otherWin
        self.tree = ttk.Treeview(frame)
        self.tree.pack(side=tkinter.LEFT, fill=tkinter.Y)

        tmp_path = path.replace('\\', '-')
        root = self.tree.insert('', 'end',
                                text=self.get_last_path(path),
                                open=True,
                                values=(tmp_path))

        self.load_tree(root, path)

        # 滚动条
        self.scr = tkinter.Scrollbar(frame)
        self.scr.pack(side=tkinter.RIGHT, fill=tkinter.Y)
        self.scr.config(command=self.tree.yview)
        self.tree.config(yscrollcommand=self.scr.set)

        # 绑定事件
        self.tree.bind('<<TreeviewSelect>>', self.find_fun)

    #
    def find_fun(self, event):
        # widget 触发这个事件的小构件对象
        find_names = event.widget.selection()
        for sv in find_names:
            file_name = self.tree.item(sv)['text']
            # 在entry控件中显示文件名称
            self.otherWin.ev.set(file_name)
            path2 = self.tree.item(sv)['values'][0]
            path3 = path2.replace('-', '\\')
            str_text = path3
            if str_text.endswith('.py'):
                str_text += "\n"
                with open(path3, 'r', encoding='utf-8') as f:
                    str_text += f.read()
            # 把内容显示到text控件中
            self.otherWin.txt.delete(0.0, tkinter.END)
            self.otherWin.txt.insert(tkinter.INSERT, str_text)

    # 把下级目录或文件加入到树状目录
    def load_tree(self, parent, parentPath):
        for fileName in os.listdir(parentPath):
            absPath = os.path.join(parentPath, fileName)
            tmp_path = absPath.replace('\\', '-')
            # 插入树枝
            treeF = self.tree.insert(parent, 'end',
                                     text=self.get_last_path(absPath),
                                     values=(tmp_path))
            if os.path.isdir(absPath):
                self.load_tree(treeF, absPath)

    # 解析路径中的文件名
    def get_last_path(self, path):
        paths = os.path.split(path)
        return paths[-1]

右侧显示

右侧内容为一个输入框和文本内容显示框,来显示左侧选择的文件路径及文件内容。

示例如下:

import tkinter


class InfoWin(tkinter.Frame):

    def __init__(self, master):
        frame = tkinter.Frame(master)
        frame.grid(row=0, column=1)

        self.ev = tkinter.Variable()
        self.entry = tkinter.Entry(frame, textvariable=self.ev)
        self.entry.pack()

        self.txt = tkinter.Text(frame)
        self.txt.pack(side=tkinter.LEFT, fill=tkinter.Y)

        # 滚动条
        self.scr = tkinter.Scrollbar(frame)
        self.scr.pack(side=tkinter.RIGHT, fill=tkinter.Y)
        self.scr.config(command=self.txt.yview)
        self.txt.config(yscrollcommand=self.scr.set)

调用实现窗口

对左右两侧实现内容进行整合,调用实现整体功能。

示例如下:

import tkinter

from treeWin import TreeWin
from infoWin import InfoWin


tk = tkinter.Tk()
tk.title('树状目录')
tk.geometry('900x400+200+50')

path = 'E:\lianxipy\python基础'
infoWin = InfoWin(tk)
treeWin = TreeWin(tk, path, infoWin)

tk.mainloop()

调用treeView.py后可实现下面效果。

效果如下:

打开目录

打开py文件 

总结

本篇为Python tkinter控件的综合应用,实现了一个比较简单的树状目录窗口。

涉及布局、滚动条、输入文本、文本显示等控件使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1439838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++基础入门】七、指针(定义和使用、所占内存空间、空指针和野指针、const关键字修饰指针、指针和数组、指针和函数)

七、指针 7.1 指针的基本概念 指针的作用&#xff1a; 可以通过指针间接访问内存 内存编号是从0开始记录的&#xff0c;一般用十六进制数字表示可以利用指针变量保存地址 7.2 指针变量的定义和使用 指针变量定义语法&#xff1a; 数据类型 * 变量名&#xff1b; 示例&…

Java应用中各类环境变量的优先级及最佳实践

1.引言 Java应用程序的开发和部署过程中&#xff0c;合理利用各类环境变量是关键之一。不同类型的环境变量&#xff0c;如系统环境变量、进程级环境变量、Java启动参数设置的系统属性以及Spring Boot配置文件中的环境变量&#xff0c;它们之间存在优先级差异。 深入理解这些环…

Ansible command命令模块 这个模块可以直接在远程主机上执行命令,并将结果返回本主机。

目录 参数介绍练习环境配置主机清单配置无密码链接ping模块 command 命令模块也可以用来安装点东西看个路径 command 指定目录来 指定命令 参数介绍 chdir    # 在执行命令之前&#xff0c;先切换到该目录 executable # 切换shell来执行命令&#xff0c;需要使用命令的绝对…

leetcode(滑动窗口)483.找到字符中所有字母异位词(C++详细解释)DAY4

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&a…

上市公司人工智能转型指数及55个工具变量汇总数据集(2024.2月更新)

一、“智能化转型”发文趋势和主题分布 二、数据来源 上市公司年报、官网&#xff0c;中国知网及各期刊官网等三、时间跨度 工具变量&#xff1a;2022-2024年&#xff1b; 上市公司人工智能转型指数&#xff1a;2007-2021年四、数据范围 中国A股上市公司五、数据展示 序号…

Qt QVariant类应用

QVariant类 QVariant类本质为C联合(Union)数据类型&#xff0c;它可以保存很多Qt类型的值&#xff0c;包括 QBrush&#xff0c;QColor&#xff0c;QString等等&#xff0c;也能存放Qt的容器类型的值。 QVariant::StringList 是 Qt 定义的一个 QVariant::type 枚举类型的变量&…

【Unity游戏设计】跳一跳Day1

一、创建场景 Assets/Secnes:GameAssets创建游戏资源Prefabs存放预制体,Scripts脚本,Sounds声音,Textures图片资源,Materiais材质资源分类存放意识 二、场景建模 注意&#xff1a;alt鼠标左键切换视角 视角与摄像机视角保持一致&#xff1a;Main CameraGameObjectAlign Vie…

React环境配置

1.安装Node.js Node.js官网&#xff1a;https://nodejs.org/en/ 下载之后按默认选项安装好 重启电脑即可自动完成配置 2.安装React 国内使用 npm 速度很慢&#xff0c;可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm。 ①使用 winR 输入 cmd 打开终端 ②依…

【递归】【前序中序后序遍历】【递归调用栈空间与二叉树深度有关】【斐波那契数】Leetcode 94 144 145

【递归】【前序中序后序遍历】【递归调用栈空间与二叉树深度有关】Leetcode 94 144 145 1.前序遍历&#xff08;递归&#xff09; preorder2.中序遍历&#xff08;递归&#xff09;inorder3.后序遍历&#xff08;递归&#xff09;postorder4. 斐波那契数 ---------------&…

易点易动固定资产管理系统:为中大型企业量身定制的固定资产解决方案

现代商业环境中&#xff0c;中大型企业面临着大规模固定资产管理的挑战。传统的手动管理方法往往效率低下、容易出错&#xff0c;给企业带来了许多困扰。幸运的是&#xff0c;现在有了易点易动固定资产管理系统&#xff0c;它为中大型企业提供了一种全新的方式来轻松管理和追踪…

相机图像质量研究(9)常见问题总结:光学结构对成像的影响--工厂镜头组装

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

PIL Image 使用详解

文章目录 1. 各种图像处理库介绍1.1 读取数据的通道顺序1.2 Python图像处理库&#xff08;PIL、Pillow、Scikit-image、Opencv&#xff09; 2、PIL库与Pillow库的区别3 Pillow库3.1 Pillow库特点3.2 Pillow库安装 4、Pillow的Image对象&#xff08;PIL.Image&#xff09;4.1 Im…

【Spring源码解读!底层原理进阶】【下】探寻Spring内部:BeanFactory和ApplicationContext实现原理揭秘✨

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

代码随想录算法训练营29期|day43 任务以及具体任务

第九章 动态规划 part05 1049. 最后一块石头的重量 II class Solution {public int lastStoneWeightII(int[] stones) {int sum 0;for (int i : stones) {sum i;}int target sum >> 1;//初始化dp数组int[] dp new int[target 1];for (int i 0; i < stones.lengt…

HttpServletResponse接口用于表示状态代码的字段

1. HttpServletResponse接口用于表示状态代码的字段 您已学习了状态代码以及可用于从servlet向客户机发送状态代码的HttpServletResponse接口的字段。下表列出了HttpServletResponse接口表示状态代码的一些其他字段。 字段状态代码描述SC_HTTP_VERSION_NOT_SUPPORTED505服务器…

TCP相关知识点

TCP相关知识点 参考&#xff1a; 《计算机网络》 (建议收藏)TCP协议灵魂之问&#xff0c;巩固你的网路底层基础 关于 TCP 三次握手和四次挥手&#xff0c;满分回答在此 (值得看) TCP处于网络体系结构中的运输层。 运输层主要为应用进程提供端到端的逻辑通信&#xff0c;然后对…

牛客网SQL进阶137:第二快/慢用时之差大于试卷时长一半的试卷

官网链接&#xff1a; 第二快慢用时之差大于试卷时长一半的试卷_牛客题霸_牛客网现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别,。题目来自【牛客题霸】https://www.nowcoder.com/practice/b1e2864271c14b63b0df9fc08b559166?tpId240 0 问题描述 试…

Java实现网上药店系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药品档案模块2.4 药品订单模块2.5 药品收藏模块2.6 药品资讯模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 药品表3.2.3 药品订单表3.2.4 药品收藏表3.2.5 药品留言表…

codemirror光标样式问题

输入框为空时会显示placeholder&#xff0c;文字有点长换行了&#xff0c;光标竟然变成上图那样了&#xff0c;我试过如果placeholder文字是三行&#xff0c;那么光标就是三行高。真是见了鬼了。查到最后&#xff0c;原因竟然是因为我在用vue-codemirror时为了去掉一些basicSet…

JavaScript中call、apply、bind方法的应用与区别

在JavaScript中&#xff0c;call、apply和bind是函数的三个重要方法&#xff0c;它们虽然功能不同&#xff0c;但都可以用来改变函数的执行上下文或者传递参数。本文将分别介绍call、apply和bind方法的应用和区别&#xff0c;并附带示例代码。 一、call方法 call方法的作用是…