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