Python tkinter树状目录窗口实现

发布于:2024-02-09 ⋅ 阅读:(42) ⋅ 点赞:(0)

通过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控件的综合应用,实现了一个比较简单的树状目录窗口。

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

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到