Python tkinter树状目录窗口实现

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

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

 

目录

tkinter树状目录

左侧树状目录

右侧显示

调用实现窗口

打开目录

打开py文件 

总结


tkinter树状目录

左侧树状目录

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

并赋值内容在右侧显示。

示例如下:

import tkinter
from tkinter import ttk
import osclass TreeWin(tkinter.Frame):def __init__(self, master, path, otherWin):frame = tkinter.Frame(master)frame.grid(row=0, column=0)# 绑定infoWinself.otherWin = otherWinself.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 = path3if 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 tkinterclass 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 tkinterfrom treeWin import TreeWin
from infoWin import InfoWintk = 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.hqwc.cn/news/459385.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用influxdb+Grafana+nmon2influxdb+nmon实时监控vps性能

Grafana可以用来实时查看linux系统的各种性能数据。 1、安装环境&#xff1a; centos 7influxdb1.7.6grafana-4.6.3-1nmon2influxdb-2.1.7nmon-16m 2、安装influxdb&#xff1a; 下载rpm包&#xff1a; influxdb官网&#xff1a;https://docs.influxdata.com/influxdb/v2.0…

Win10系统启动盘制作

前面简单介绍了操作系统&#xff0c;但是怎样将操作系统安装到磁盘上呢。 一、操作系统引导 电脑启动大致流程&#xff1a; 预引导阶段&#xff1a;计算机通电后&#xff0c;系统自检&#xff0c;检查硬件是否正常。 引导阶段&#xff1a;BIOS或EFI在完成基本的硬件检测和平台初…

Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>解决方案

目录 发现问题 解决办法 第一步 第二步 第三步 第四步 最后一步 问题解决 发现问题 如果大家也遇到下面这种问题&#xff0c;可能是没有include文件夹中没有bits/stdc.h 解决办法 第一步 打开一个C项目&#xff0c;鼠标移动至头文件上右击&#xff0c;选择转到文档或…

基于SpringBoot3的快速迭代平台

SpringBoot3的快速开发平台 前言一、技术栈二、项目结构三、总结 前言 MateBoot是一个基于SpringBoot3的快速开发平台&#xff0c;采用前后端分离的模式&#xff0c;前端采用Element Plus组件&#xff0c;后端采用SpringBoot3、Sa-token、Mybatis-Plus、Redis、RabbitMQ、Fast…

2024.2.6

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用快速排序实现升序排序 函数4:请使用插入排序实现升序排序 #include<stdio.h> #include<string.h&g…

JVM-运行时数据区程序计数器

运行时数据区 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。《Java虚拟机规范》中规定了每一部分的作用。 程序计数器的定义 程序计数器&#xff08;Program Counter Register&#xff09;也叫PC寄存器&#xff0c;每个线程会通过程序计数器…

c#: 表达式树的简化

环境&#xff1a; .net 6 一、问题&#xff1f; 有下面的表达式&#xff1a; var nums new List<int> { 1, 2, 3 }; Expression<Func<int, bool>> exp i > i > nums.Max();我们知道&#xff0c;它其实就是&#xff1a;exp i > i > 3; 那么…

【射影几何13 】梅氏定理和塞瓦定理探讨

梅氏定理和塞瓦定理 目录 一、说明二、梅涅劳斯&#xff08;Menelaus&#xff09;定理三、塞瓦(Giovanni Ceva&#xff09;定理四、塞瓦点的推广 一、说明 在射影几何中&#xff0c;梅涅劳斯&#xff08;Menelaus&#xff09;定理和塞瓦定理是非常重要的基本定理。通过这两个定…

TI毫米波雷达开发——High Accuracy Demo 串口数据接收及TLV协议解析 matlab 源码

TI毫米波雷达开发——串口数据接收及TLV协议解析 matlab 源码 前置基础源代码功能说明功能演示视频文件结构01.bin / 02.binParseData.mread_file_and_plot_object_location.mread_serial_port_and_plot_object_location.m函数解析configureSport(comportSnum)readUartCallback…

基于卷积神经网络模型的手写数字识别

基于卷积神经网络模型的手写数字识别 一. 前言二. 设计目的及任务描述2.1 设计目的2.2 设计任务 三. 神经网络模型3.1 卷积神经网络模型方案3.2 卷积神经网络模型训练过程3.3 卷积神经网络模型测试 四. 程序设计 一. 前言 手写数字识别要求利用MNIST数据集里的70000张手写体数…

2024/2/7总结

Node.js 什么是node.js node.js是一个基于chrome v8 引擎的 JavaScript 运行环境。 浏览器是JavaScript的前端运行环境node.js是JavaScript的后端运行环境 node.js中无法调用DOM和BOM等浏览器内置API fs模块 是node.js官方提供的、用来操作文件的模块&#xff0c;它提供了一系…

Redis篇之集群

一、主从复制 1.实现主从作用 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。主节点用来写的操作&#xff0c;从节点用来读操作&#xff0c;并且主节点发生写操作后&#xff0c;会把数据同…