Tkinter 之文件管理器
一、效果图
二、功能描述
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 之文件管理器的更多相关文章
- 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)
1.文件管理器(NSFileManager) 1> 主要作用及功能方法 主要作用:此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 功能方法: 2> 创建文件夹 创建所 ...
- atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...
- Web 在线文件管理器学习笔记与总结(19)上传文件
dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...
- Web 在线文件管理器学习笔记与总结(17)复制文件 (18)剪切文件
(17)复制文件 ① 复制文件通过copy($src,$dst) 来实现 ② 检测目标目录是否存在,如果存在则继续检测目标目录中是否存在同名文件,如果不存在则复制成功 file.func.php 中添 ...
- Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹
(15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...
- Web 在线文件管理器学习笔记与总结(13)重命名文件夹(14)复制文件夹
(13)重命名文件夹 ① 重命名文件夹通过 rename($oldname,$newname) 实现 ② 检测文件夹名是否符合规范 ③ 检测当前目录中是否存在同名文件夹名称,如果不存在则重命名成功 i ...
- Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作
(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...
- Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容
① 读取文件夹大小 a. 封装计算文件夹大小的函数 b. 打开文件夹 c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小:如果是文件夹,则递归调用该函数 注意两个问题: ...
- Web 在线文件管理器学习笔记与总结(9)下载文件
① 普通形式的文件可以使用超链接形式下载 <a href = '下载文件名'>点击下载</a> ② 如果下载图片.html 等类型的文件,使用header() 函数发送网页头信 ...
随机推荐
- 【高并发解决方案】8、Nginx/LVS/HAProxy负载均衡软件的优缺点详解
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...
- 有价证券secuerity英语
证券业 证券业是为证券投资活动服务的专门行业.各国定义的证券业范围略有不同.按照美国的 “产业分类标准”,证券业由证券经纪公司.证券交易所和有关的商品经纪集团组成.证券业在世界各国都是一个小的产业部门 ...
- Vue项目整体架构记要
此文记录初次学习Vue的一些记要,可做为参考,导图有些生涩,故意不再加以修复完善,以持初心!
- 基于 Express + MySQL + Redis 搭建多用户博客系统
1. 项目地址 https://github.com/caochangkui/node-express-koa2-project/tree/master/blog-express 2. 项目实现 Ex ...
- 根据不同配置.env获取不同的配置文件的配置
env 不同环境 1. 安装扩展 composer require vlucas/phpdotenv 2 . 创建文件 .env .env.test .env.production .env.exam ...
- Python学习日记(三十四) Mysql数据库篇 二
外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...
- Flask项目-循环导入及蓝图
在学习flask时,肯定有许多人好奇,为什么一定要使用蓝图,而不能直接使用app应用程序对象导来导去,很多可能会说那是由于 循环导入的缘故,但是当我们通过url访问视图函数的时候,为什么会报404 n ...
- Python 多线程爬取站酷(zcool.com.cn)图片
极速爬取下载站酷(https://www.zcool.com.cn/)设计师/用户上传的全部照片/插画等图片. 项目地址:https://github.com/lonsty/scraper 特点: 极 ...
- Eclipse安装JDK11方式
安装JDK11JDK下载网址:https://www.oracle.com/technetwork/java/javase/downloads Java SE Development Kit 11ht ...
- pip的安装、以及使用方法。
pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法. 1.pip下载安装 1.1 pip下载 1 # wget "https://py ...