通过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控件的综合应用,实现了一个比较简单的树状目录窗口。
涉及布局、滚动条、输入文本、文本显示等控件使用。