高考完后这么久才想起这系列教程,实在抱歉,现在该来继续教程了。

本节利用前面所学知识,来完成一个小工具——文本编辑器!

tkinter

在实现文本编辑器之前,先来了解下tkinter这个python库。

tkinter库用来实现GUI程序(Graphical User Interface 图形用户界面),我们实现的文本编辑器是有图形的,类似windows系统下的记事本。

当然啦,写GUI程序不只有tkinter库,还有更为强大的pyqt、wxpython等,不过对于本节实现编辑器来说,简单的tkinter库就已经足够了,而且windows安装的python一般自带了这个库,不必另外安装。

实现文本编辑器

第一步——界面

首先,我们先把编辑器的图形界面写好。

什么?还没说tkinter库怎么用就开工了?@_@

别慌!很简单,看下面代码,相信注释很清楚了:

import tkinter
# 导入tkinter库 win = tkinter.Tk() # 创建窗口
win.title('文本编辑器') # 设置标题 entry_file = tkinter.Entry(win) # 创建一个文本输入框,用来设置文件路径
entry_file.pack() # 放置该输入框 def do_open():
# 打开文件
pass
def do_save():
# 保存文件
pass btn_open = tkinter.Button(win, text='打开', command=do_open) # 创建按钮用于打开文件
btn_save = tkinter.Button(win, text='保存', command=do_save) # 创建按钮用于保存文件 # 放置按钮
btn_open.pack()
btn_save.pack() # 创建多行文本框,用于编辑文件
text = tkinter.Text(win)
text.pack() win.mainloop() # 进入消息循环

使用tkinter创建GUI程序,一般有以下框架:

win = tkinter.Tk()  # 创建窗口

# 界面的布局,如添加按钮、文本框等等

win.mainloop()  # 进入消息循环

现在不必理解这个框架,我们就照着写就好了。

现在对其中的一些地方做下解释,一般创建控件(按钮,文本框等称为控件)的第一个参数为所在的容器,我们的程序里的控件都在主窗口里,也就是win对象。

我们首先创建了一个文本输入框,用来设置要操作文件的路径。

创建按钮可以使用关键字参数text来设置按钮的标签(显示的文字),用关键字参数command来设置点击按钮所做的事,我们分别创建了两个按钮,一个用来打开文件,一个用来保存文件。

最后创建了一个多行文本框,用于文件的编辑。

运行程序,窗口大致如下:

大家的界面的样式可能有点不一样,这个因操作系统环境而异

(本人比较懒,因为本节重点不是图形界面,所以没有去规划界面的布局,仅仅把控件直接随意放置,如有兴趣,可以自己搜索tkinter的具体用法,画一个比这个好看得多的界面^_^

第二步——打开文件

现在我们来实现打开文件这个功能,还记得前面有一句这样的代码吗?

btn_open = tkinter.Button(win, text='打开', command=do_open)  # 创建按钮用于打开文件

我们给创建按钮的tkinter.Button函数(实际上这不是函数),传递了一个参数command=do_open,该参数用于设置当按钮被点击时自动调用的函数,所以我们的重点就是实现这个当点击时自动调用的do_open函数。

打开文件的流程是怎么样的呢?

  1. 首先,我们要知道文件的路径,先从文本输入框输入文件的路径
  2. 点击打开按钮
  3. 点击打开按钮幕后将文件打开,读取文件内容,把文件内容显示d奥多行文本框中

其实我们的do_open函数就是上面的第三步,打开文件=>读取数据=>显示数据

具体代码如下:

def do_open():
# 打开文件
file_path = entry_file.get() # 获取文本框的内容
with open(file_path) as fr:
# 打开文件
content = fr.read() #一次性读取文件内容,对大文件不宜使用
text.delete(0.0, tkinter.END) # 清空文本框内容
text.insert(tkinter.END, content) # 在光标后插入内容

首先我们通过file_path = entry_file.get()获取到了文本输入框的内容作为文件的路径,用with代码块打开文件,读取文件数据后,将数据插入到多行文本框显示。

在插入数据之前,先使用text.delete(0.0, tkinter.END)清空文本框,这里就不多解释了。具体用法可以自己查查。

示例如下(这里我打开了python源码文件本身):

第三步——保存文件

保存文件的功能实现类似打开文件,点击保存按钮后:获取多行文本框内容=>打开文件=>写入文件

话不多说,上代码!

def do_save():
# 保存文件
content = text.get(0.0, tkinter.END) # 获取文本框内容
file_path = entry_file.get() # 文件路径
with open(file_path, 'w') as fw:
fw.write(content) # 写入数据到文件中

gif动图演示:

首先我在多行文本框中输入了abcdefghijk,在文本输入框输入文件路径1.txt,然后点击保存。

之后把多行文本框的内容都删掉,再打开1.txt文件,可以看到刚刚输入的abcdefghijk内容,浏览目录也可以发现,当前目录下确实多了一个1.txt文件,可以用记事本查看,文件确实保存成功!

完整代码

现贴出完整的代码:

import tkinter
# 导入tkinter库 win = tkinter.Tk() # 创建窗口
win.title('文本编辑器') # 设置标题 entry_file = tkinter.Entry(win) # 创建一个文本输入框
entry_file.pack() # 放置该输入框 def do_open():
# 打开文件
file_path = entry_file.get() # 获取文本框的内容
with open(file_path) as fr:
# 打开文件
content = fr.read() #一次性读取文件内容,对大文件不宜使用
text.delete(0.0, tkinter.END) # 清空文本框内容
text.insert(tkinter.END, content) # 在光标后插入内容 def do_save():
# 保存文件
content = text.get(0.0, tkinter.END) # 获取文本框内容
file_path = entry_file.get() # 文件路径
with open(file_path, 'w') as fw:
fw.write(content) btn_open = tkinter.Button(win, text='打开', command=do_open) # 创建按钮用于打开文件
btn_save = tkinter.Button(win, text='保存', command=do_save) # 创建按钮用于保存文件 # 放置按钮
btn_open.pack()
btn_save.pack() # 创建多行文本框,用于编辑文件
text = tkinter.Text(win)
text.pack() win.mainloop() # 进入消息循环

总结

这个小工具很简单(也很丑 ( ̄_, ̄ )),但也将文件读写的知识应用到了实际。

如果大家对tkinter有兴趣的话,可以自己搜索学习,相信大家能做出有趣的程序来。

python小项目之文本编辑器的更多相关文章

  1. vue项目富文本编辑器vue-quill-editor之自定义图片上传

    使用富文本编辑器的第一步肯定是先安装依赖 npm i vue-quill-editor 1.如果按照官网富文本编辑器中的图片上传是将图片转为base64格式的,如果需要上传图片到自己的服务器,需要修改 ...

  2. 【计算机视觉】OpenCV篇(4) - Pycharm+PyQt5+Python小项目实战

    1.下载安装 (1)Pycharm:下载链接 (2)推荐使用Qt Designer来设计界面,如果你装的是Anaconda的话,就已经自带了designer.exe,我这里使用的是Pycharm的虚拟 ...

  3. bbs项目富文本编辑器实现上传文件到media目录

    media目录是在project的settings中设置的,static目录是django自己使用的静态文件的上传目录,media目录是用户自定义上传文件的目录 # Django用户上传的文件都放在m ...

  4. Python小项目四:实现简单的web服务器

    https://blog.csdn.net/u010103202/article/details/74002538 本博客是整理在学习实验楼的课程过程中记录下的笔记形成的,参考:https://www ...

  5. python小项目之微信远程控制

    前两天接触了一个有趣的python模块--itchat,这个模块可以非常方便的操作微信,今天就来使用这个模块来实现微信远程控制. 环境准备 itchat模块不是python标准模块(内置模块),是一个 ...

  6. Python小项目之五子棋

    1.项目简介 在刚刚学习完python套接字的时候做的一个五子棋小游戏,可以在局域网内双人对战,也可以和电脑对战 2.实现思路 局域网对战 对于局域网功能来说,首先建立连接(tcp),然后每次下棋时将 ...

  7. 第一个Python小项目:图片转换成字符图片

    实现的效果:                                                                                               ...

  8. [原创]Python/Django使用富文本编辑器XHeditor上传本地图片

    前言 为了在Django框架下使用Xheditor上传图片,居然折腾了我一个晚上.期间也遇到种种问题,网上相关资料极少.现在把经验分享给大家. 正文 xheditor篇 1.下载http://xhed ...

  9. 给大家推荐:五个Python小项目,Github上的人气很高的

    1.深度学习框架 Pytorch https://github.com/pytorch/pytorch PyTorch 是一个 Torch7 团队开源的 Python 优先的深度学习框架,提供两个高级 ...

随机推荐

  1. mybatis框架,使用foreach实现复杂结果的查询--循环集合数组

    需求:假定现在查询出用户角色是2和3指定的用户列表信息,并进行展示 接口: /** * 需求:传入指定的用户角色,用户角色有1-n,获取这些用户角色下的用户列表信息 * @param roleids ...

  2. Comet OJ 夏季欢乐赛 分配学号

    Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...

  3. ant design pro如何实现分步表单时,返回上一步值依然被保存

    首先,分步表单ant design pro支持,看官方Demo即可,那么如何实现如题,关键在于设置initialValue {getFieldDecorator('name', { initialVa ...

  4. 30-ESP8266 SDK开发基础入门篇--SPI

    这节只是做记录, 整个的教程呢,重新整理下 教程有点乱,需要再细分一下 这节只是做一下我使用其SPI的记录 还是老样子,看人家LUA源码里面怎么使用的 注意哈,对于8266 SDK的学习我还是建议大家 ...

  5. Linux 进程树查看工具 pstree

    pstree 是 Linux 下的一个用于展示进程树结构的工具,类似于 tree 展示目录树一样,可视化地查看进程的继承关系.pstree 工具其实是 PSmisc 工具集的成员之一,PSmisc 工 ...

  6. 虚方法(virtual)\抽象方法(abstract)\接口(interface)的区别

    转自:https://www.cnblogs.com/fantaohaoyou/p/9402657.html 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,抽 ...

  7. 「CodeM」排列

    传送门 Description 给 \(n\) 个二维点 \((a_i,b_i)\),询问有多少种排列 \(p\)(答案对 \(10^9+7\) 取模)使得执行以下伪代码后留下的点是 \(i\),即最 ...

  8. 【Gamma】Scrum Meeting 7

    前言 会议定点:大运村公寓 会议时间:2019/6/5 会议目的:明确下阶段目标 一.任务进度 组员 上周任务进度 下阶段任务 大娃 修复后端bug 辅助做好引导录屏 二娃 撰写会议博客 撰写会议博客 ...

  9. spring&pom两种获取profile的方式

    一.原理: 1.实现ApplicationContextAware(当一个类实现了ApplicationContextAware这个接口之后,这个类就可以通过setApplicationContext ...

  10. .NetCore快速搭建ELK分布式日志中心

    懒人必备:.NetCore快速搭建ELK分布式日志中心   该篇内容由个人博客点击跳转同步更新!转载请注明出处! 前言 ELK是什么 它是一个分布式日志解决方案,是Logstash.Elastaics ...