前言

本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能。

示例图

如上图,我们可以看到这个记事本主要分为三个模块:文件,编辑和关于,结合我自身的习惯外加四个toolbar:新建、打开、撤销和保存。

下来就我个人构建这个记事本做个总结。

一、整体框架构建

1.三个主模块的建立

首先,我们先建立上图中的三个主模块,同时,在模块中建立各个模块的功能。先以文件为例:下设功能:新建、打开、保存和另存为,代码如下:

#-*-encoding:utf8

from Tkinter import *

root = Tk()

root.title('Benben Node')

#create menu

menubar = Menu(root)

root.config(menu = menubar)

filemenu = Menu(menubar)

filemenu.add_command(label = '新建',accelerator ='ctrl + N')

filemenu.add_command(label = '打开',accelerator ='ctrl + O')

filemenu.add_command(label = '保存',accelerator ='ctrl + S')

filemenu.add_command(label = '另存为',accelerator ='ctrl + Shift + s')

menubar.add_cascade(label = '文件',menu = filemenu)

root.mainloop()

运行结果:

我们可以看到一个简单的文件栏就建好了。对应的建立编辑和关于模块。编辑指的是对文本编辑中要使用的模块,下设功能:撤销,重做,复制,剪切,粘贴,查找和全选;关于是下设作者和版权两栏。相应模块对应的代码如下:

#编辑

editmenu = Menu(menubar)

editmenu.add_command(label = '撤销',accelerator = 'ctrl + z')

editmenu.add_command(label = '重做',accelerator = 'ctrl + y')

editmenu.add_command(label = '复制',accelerator = 'ctrl + c')

editmenu.add_command(label = '剪切',accelerator = 'ctrl + x')

editmenu.add_command(label = '粘贴',accelerator = 'ctrl + v')

editmenu.add_command(label = '查找',accelerator = 'ctrl + F')

editmenu.add_command(label = '全选',accelerator = 'ctrl + A')

menubar.add_cascade(label = '编辑',menu = editmenu)

#关于

aboutmenu = Menu(menubar)

aboutmenu.add_command(label = '作者')

aboutmenu.add_command(label = '版权')

menubar.add_cascade(label = '关于',menu = aboutmenu)

运行结果:

截图未能得到各个模块对应的功能。

2.toolbar

在记事本中添加toolbar,添加对应的button并设定合适的间距,对应的代码如下:

#toolbar

toolbar = Frame(root,height = 15,bg = 'SkyBlue')

shortButton = Button(toolbar,text = '新建',command = open)

shortButton.pack(side = LEFT)

shortButton = Button(toolbar,text = '打开',command = openfile)

shortButton.pack(side = LEFT,padx = 5,pady = 5)

shortButton = Button(toolbar,text = '保存',command = save)

shortButton.pack(side = RIGHT)

shortButton = Button(toolbar,text = '撤销',command = undo)

shortButton.pack(side = RIGHT,padx = 5,pady = 5)

toolbar.pack(expand = NO,fill = X)

3.创建状态栏(statusbar)和正文编辑区域

首先在程序中添加:

root = Tk()

root.title('Benben Node')

root.geometry("800x500+100+100")

编辑状态栏的代码:

#statusbar

status = Label(root,text = 'Ln20',bd = 1,relief = SUNKEN,anchor = 'w')

status.pack(side = BOTTOM,fill = X)

当然我们还可以建立相应的编辑区域和滚动条,对应的代码如下:

#正文编辑区域

lnlabel = Label(root,width = 2,bg = 'antique white')

lnlabel.pack(side = LEFT,fill = Y)

textpad = Text(root,undo = True)

textpad.pack(expand = YES,fill = BOTH)

scroll = Scrollbar(textpad)

textpad.config(yscrollcommand = scroll.set)

scroll.config(command = textpad.yview)

scroll.pack(side = RIGHT,fill = Y)

执行代码,结果:

输入相应的可以看到右边界对应的滚动条随输入滚动。

二、关于模块的实现

在这三个模块中,关于是最好实现的一个,那就从最简单的开始实现吧。

对应的代码如下:

from tkMessageBox import *

#关于

def author():

showinfo('作者信息','本软件由可爱的奔奔完成')

def about():

showinfo('版权信息.copyright','版权属于奔奔')

aboutmenu = Menu(menubar)

aboutmenu.add_command(label = '作者',command = author)

aboutmenu.add_command(label = '版权',command = about)

menubar.add_cascade(label = '关于',menu = aboutmenu)

运行结果:

三、文件模块的实现

这部分的实现参见Tkinter官网中的fileDialogs,相应的使用各个方法实现功能:新建、打开、保存和另存为,建立相应的函数实现,代码如下:

#新建

def new():

root.title('未命名文件')

filename = None

textpad.delete(1.0,END)

#打开

def openfile():

global filename

filename = askopenfilename(defaultextension = '.txt')

if filename == '':

filename = None

else:

root.title('FileName:'+os.path.basename(filename))

textpad.delete(1.0,END)

f = open(filename,'r')

textpad.insert(1.0,f.read())

f.close()

#保存

def save():

global filename

try:

f = open(filename,'w')

msg = textpad.get(1.0,END)

f.write(msg)

f.close()

except:

saveas()

#另存为

def saveas():

f = asksaveasfilename(initialfile= '未命名.txt', defaultextension='.txt')

global filename

filename = f

fh = open(f,'w')

msg = textpad.get(1.0,END)

fh.write(msg)

fh.close()

root.title('FileName:'+os.path.basename(f))

相应的在filemenu和toolbar中加入对应的command,运行结果:

四、编辑模块的实现

编辑要实现的功能:撤销,重做,复制,剪切,粘贴,查找和全选,对应的函数代码如下:

def cut():

textpad.event_generate('<>')

def copy():

textpad.event_generate('<>')

def paste():

textpad.event_generate('<>')

def redo():

textpad.event_generate('<>')

def undo():

textpad.event_generate('<>')

def selectAll():

textpad.tag_add('sel','1.0',END)

def search():

topsearch = Toplevel(root)

topsearch.geometry('300x30+200+250')

label1 = Label(topsearch,text='Find')

label1.grid(row=0, column=0,padx=5)

entry1 = Entry(topsearch,width=20)

entry1.grid(row=0, column=1,padx=5)

button1 = Button(topsearch,text='查找')

button1.grid(row=0, column=2)

同样在editmenu和toolbar中加入对应的command。运行代码,功能实现!快捷键亲测可用~

总结

以上就是这篇文中的全部内容了,这算是对此次开发的简单记事本的一个总结,之后有时间也是会添加更多的功能。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果疑问大家可以留言交流。

记事本如何运行python代码_利用Python开发实现简单的记事本相关推荐

  1. python 运行部分代码_改改Python代码,运行速度还能提升6万倍

    如果摩尔定律注定终结,人类的算力会被「锁死」吗?MIT.英伟达.微软研究者合著的一篇 Science 论文告诉我们:不会. 这份最新研究指出,在后摩尔定律时代,人类所获得的的算力提升将更大程度上来源于 ...

  2. python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...

    相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...

  3. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

  4. python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结

    利用Python实现对考勤打卡数据处理的总结 一.背景交代 二.说明 三. 8种方法 1. 查看文件是否存在 2. 导入excel文件,并把数据保存为dataframe格式 3. 计算程序运行时间 4 ...

  5. python定时开关机的代码_利用Python实现Windows定时关机功能

    是最初的几个爬虫,让我认识了Python这个新朋友,虽然才刚认识了几天,但感觉有种莫名的默契感.每当在别的地方找不到思路,总能在Python找到解决的办法.自动关机,在平时下载大文件,以及跑程序的时候 ...

  6. python计算面积代码_利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...

  7. python 运行程序代码_一些python程序

    <从问题到程序:用Python学编程和计算>--1.2 Python语言简介 本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第1章,第1.2节,作者 ...

  8. python删除数据库的数据完整代码_利用python操作小程序云数据库实现简单的增删改查...

    不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...

  9. python利用pandas合并excel表格代码_利用Python pandas对Excel进行合并的方法示例

    前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...

最新文章

  1. 无限城市助力智慧城市 挥毫创新3.0时代
  2. HTML5移动应用开发入门经典 中文pdf扫描版
  3. Hadoop 2.x的DistributedCache无法工作的问题
  4. html window 属性,html中window对象top 、self 、parent 等属性
  5. mysql 索引合并_MySQL 索引合并(Index Merge)优化
  6. 数据仓库中的模型设计(转)
  7. 【JavaScript】将浮点数与整数分开
  8. Android EditText中插入图片并响应点击事件
  9. android gridview 数据绑定,Android GridView数据绑定
  10. xml中出现“文档中根元素后面的标记必须格式正确” 的错误
  11. 2021-01-21安装FireFox插件FireBug和FirePath时遇到得坑(windows10)
  12. java自行车租凭系统项目包_基于java的校园自行车租用管理系统的设计及实现终极版.pdf...
  13. WIFi6与WIFI5技术路线演进及优势
  14. 浏览器插件——轻松、快速下载网站源代码
  15. hdu 5755 Gambler Bo 高斯消元
  16. 【已解决】双显卡电脑开机启动慢的解决办法
  17. 强化学习(1)-什么是强化学习
  18. Linux自学笔记——OpenSSL命令行工具
  19. e^x导数为什么是e^x
  20. 统计图表导入word,用到echarts,highcharts,amcharts,jfreechart

热门文章

  1. 用命令行批处理bat,设置代理服务器、DNS、网关、WINS等
  2. Oracle程序开发小技巧(一)
  3. 北美前景最好25种职业 软件工程师独占鳌头
  4. 《 Ray Tracing from the Ground Up》官方代码的潜在的纹理映射问题
  5. 典型传动机构的动力学模型
  6. mysql 5.7 编译_MySQL5.7.20编译安装
  7. 大数据要学javaweb吗_大数据是私有财产吗?
  8. 手把手教你0基础C语言速通
  9. AcWing 1952. 金发姑娘和 N 头牛(离散化+差分)
  10. ftl不存在为真_科学网—世界上第一个真正的超光速实验 - 张操的博文