一、效果图

二、功能描述

1、打开文件菜单中的打开按钮,可以选择目录。

2、可以查看各种类型的图片。

3、可以编辑文本。

4、显示行号功能,可改变目录显示的宽度。

三、使用的标签

1、Menu

2、Frame

3、PanedWindow

4、Treeview

5、Text

6、Scrollbar

四、布局代码

# -*- coding: utf-8 -*-
__author__ = 'Yang' from tkinter import *
from tkinter import ttk, messagebox, filedialog
import os
from PIL import Image, ImageTk
from threading import Thread class Application_UI(object): # path = r"E:\\python开发工具\\project\\tkinter"
path = os.path.abspath(".")
file_types = [".png", ".jpg", ".jpeg", ".ico", ".gif"]
scroll_visiblity = True font = 11
font_type = "Courier New" def __init__(self):
# 设置UI界面
window = Tk()
self.root = window
win_width = 800
win_height = 600 screen_width, screen_height = window.maxsize()
x = int((screen_width - win_width) / 2)
y = int((screen_height - win_height) / 2)
window.title("文件管理工具")
window.geometry("%sx%s+%s+%s" % (win_width, win_height, x, y)) menu = Menu(window)
window.config(menu = menu) selct_path = Menu(menu, tearoff = 0)
selct_path.add_command(label = "打开", accelerator="Ctrl + O", command = self.open_dir)
selct_path.add_command(label = "保存", accelerator="Ctrl + S", command = self.save_file) menu.add_cascade(label = "文件", menu = selct_path) about = Menu(menu, tearoff = 0)
about.add_command(label = "版本", accelerator = "v1.0.0")
about.add_command(label = "作者", accelerator = "样子")
menu.add_cascade(label = "关于", menu = about) # 顶部frame
top_frame = Frame(window, bg = "#fff")
top_frame.pack(side = TOP, fill = X)
label = Label(top_frame, text = "当前选中路径:", bg = "#fff")
label.pack(side = LEFT) self.path_var = StringVar()
self.path_var.set("无")
label_path = Label(top_frame, textvariable = self.path_var, bg = "#fff", fg = "red", height = 2)
label_path.pack(anchor = W) paned_window = PanedWindow(window, showhandle = False, orient=HORIZONTAL)
paned_window.pack(expand = 1, fill = BOTH) # 左侧frame
self.left_frame = Frame(paned_window)
paned_window.add(self.left_frame) self.tree = ttk.Treeview(self.left_frame, show = "tree", selectmode = "browse")
tree_y_scroll_bar = Scrollbar(self.left_frame, command = self.tree.yview, relief = SUNKEN, width = 2)
tree_y_scroll_bar.pack(side = RIGHT, fill = Y)
self.tree.config(yscrollcommand = tree_y_scroll_bar.set)
self.tree.pack(expand = 1, fill = BOTH) # 右侧frame
right_frame = Frame(paned_window)
paned_window.add(right_frame) # 右上角frame
right_top_frame = Frame(right_frame)
right_top_frame.pack(expand = 1, fill = BOTH) self.number_line = Text(right_top_frame, width = 0, takefocus = 0, border = 0, font = (self.font_type, self.font), cursor = "")
self.number_line.pack(side = LEFT, fill = Y) # 右上角Text
text = Text(right_top_frame, font = (self.font_type, self.font), state = DISABLED, cursor = "", wrap = NONE)
self.text_obj = text
text_x_scroll = Scrollbar(right_frame, command = text.xview, orient = HORIZONTAL)
text_y_scroll = Scrollbar(right_top_frame, command = text.yview)
self.text_scroll_obj = text_y_scroll
text.config(xscrollcommand = text_x_scroll.set, yscrollcommand = text_y_scroll.set)
text_y_scroll.pack(side = RIGHT, fill = Y)
text_x_scroll.pack(side = BOTTOM, fill = X)
text.pack(expand = 1, fill = BOTH) # 右下角frame
right_bottom_frame = Frame(right_frame)
right_bottom_frame.pack(side = BOTTOM, fill = X) self.folder_img = PhotoImage(file = r"./image/folder.png")
self.file_img = PhotoImage(file = r"./image/text_file.png") php_img = PhotoImage(file = r"./image/php.png")
python_img = PhotoImage(file = r"./image/python.png")
image_img = PhotoImage(file = r"./image/img.png") # 设置文件图标
self.icon = {".php": php_img, ".py": python_img, ".pyc": python_img, ".png": image_img, ".jpg": image_img, ".jpeg": image_img, ".gif": image_img, ".ico": image_img} # 加载目录文件
self.load_tree("", self.path)
self.tree.bind("<<TreeviewSelect>>", lambda event: self.select_tree())
text.bind("<MouseWheel>", lambda event : self.update_line()) self.number_line.bind("<FocusIn>", self.focus_in_event)
self.number_line.bind('<Button-1>', self.button_ignore)
self.number_line.bind('<Button-2>', self.button_ignore)
self.number_line.bind('<Button-3>', self.button_ignore)
self.number_line.bind('<B1-Motion>', self.button_ignore)
self.number_line.bind('<B2-Motion>', self.button_ignore)
self.number_line.bind('<B3-Motion>', self.button_ignore) self.text_scroll_obj.bind('<B1-Motion>', lambda event: self.update_line())
self.text_obj.bind('<KeyRelease>', lambda event: self.update_line()) text.bind("<Control-Key-s>", lambda event: self.save_file())
text.bind("<Control-Key-S>", lambda event: self.save_file())
text.bind("<Control-Key-Z>", lambda event: self.toUndo())
text.bind("<Control-Key-Y>", lambda event: self.toRedo()) window.mainloop()

  

代码没有展示完全,有需要完整代码的可以评论。

Tkinter 之文件管理器的更多相关文章

  1. 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)

    1.文件管理器(NSFileManager) 1> 主要作用及功能方法 主要作用:此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 功能方法: 2> 创建文件夹 创建所 ...

  2. atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php

    atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...

  3. Web 在线文件管理器学习笔记与总结(19)上传文件

    dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...

  4. Web 在线文件管理器学习笔记与总结(17)复制文件 (18)剪切文件

    (17)复制文件 ① 复制文件通过copy($src,$dst) 来实现 ② 检测目标目录是否存在,如果存在则继续检测目标目录中是否存在同名文件,如果不存在则复制成功 file.func.php 中添 ...

  5. Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹

    (15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...

  6. Web 在线文件管理器学习笔记与总结(13)重命名文件夹(14)复制文件夹

    (13)重命名文件夹 ① 重命名文件夹通过 rename($oldname,$newname) 实现 ② 检测文件夹名是否符合规范 ③ 检测当前目录中是否存在同名文件夹名称,如果不存在则重命名成功 i ...

  7. Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

    (11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

  8. Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容

    ① 读取文件夹大小 a. 封装计算文件夹大小的函数 b.  打开文件夹 c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小:如果是文件夹,则递归调用该函数 注意两个问题: ...

  9. Web 在线文件管理器学习笔记与总结(9)下载文件

    ① 普通形式的文件可以使用超链接形式下载 <a href = '下载文件名'>点击下载</a> ② 如果下载图片.html 等类型的文件,使用header() 函数发送网页头信 ...

随机推荐

  1. tf.reduce_mean函数用法及有趣区别

    sess=tf.Session() a=np.array([1,2,3,5.]) # 此代码保留为浮点数 a1=np.array([1,2,3,5]) # 此代码保留为整数 c=tf.reduce_m ...

  2. IDEA插件:search with bing、search with baidu

    //转载请注明出处:https://www.cnblogs.com/nreg/p/11267169.html 当项目出现错误时,经常需要复制错误信息粘贴到浏览器查询,但是手动复制再粘贴太麻烦了, 因此 ...

  3. 正则 \num 如:\1, \2 匹配的结果

    \num 匹配 num,其中 num 是一个正整数.对所获取的匹配的引用.例如,'(.)\1' 匹配两个连续的相同字符. 例子: 正则:/(a)(b)\1/.此表达式的意思大概是对第一个()匹配结果的 ...

  4. Node.js 实现 MySQL 数据库增删改查

    安装mysql $ npm isntall mysql 连接数据库 需要根据实际配置修改数据库用户名.及密码及数据库名 let mysql = require('mysql'); let connec ...

  5. 在DoNetCore MVC 中如何使用AutoMapper

    刚开始,按照在donet mvc 的方法写了一遍,发现行不通啊,于是百度了一下,找到这么一篇 https://stackoverflow.com/questions/41284349/automapp ...

  6. 【RAC】rac环境下的数据库备份与还原

    [RAC]rac环境下的数据库备份与还原 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~ ...

  7. github hooks 配置教程 钩子搭建(实测通过,手把手教程)

    tips:如果本文对你有用,请爱心点个赞,提高排名,让这篇文章帮助更多的人.谢谢大家!❤ 本人hooks搭建成功,全程参考JellyBool老师的视频教程,有不懂的可以先去看下这个视频,跟着操作.本文 ...

  8. Java集合框架总结2_Map

    1. Map接口概述 Map与Collection并列存在.用于保存具有映射关系的数据:key-value: Map中的key和value都可以是任何应用类型的数据: Map中的key用Set来存放, ...

  9. MSSQL镜像场景

    1.版本:一般MSSQL2016以下版本使用. 2.适用小数据库容量的异地备份:如果是数据库容量较大,产生的日志比较多:经测试,9G的数据库大小,镜像数月个日志大小达到400G,硬盘开销太大.

  10. MySQL Install--编译安装MySQL 5.7

    MySQL 编译相关选项配置和说明 [MySQL安装的根目录] -DCMAKE_INSTALL_PREFIX=/export/servers/mysql/ [MySQL数据库文件存放目录] -DMYS ...