利用Python开发实现简单的记事本


Posted in Python onNovember 15, 2016

前言

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

示例图

利用Python开发实现简单的记事本

如上图,我们可以看到这个记事本主要分为三个模块:文件,编辑和关于,结合我自身的习惯外加四个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()

运行结果:

利用Python开发实现简单的记事本

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

#编辑
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)

运行结果:

利用Python开发实现简单的记事本

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

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)

利用Python开发实现简单的记事本

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)

执行代码,结果:

利用Python开发实现简单的记事本

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

二、关于模块的实现

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

对应的代码如下:

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)

运行结果:

利用Python开发实现简单的记事本

 利用Python开发实现简单的记事本

三、文件模块的实现

这部分的实现参见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,运行结果:

利用Python开发实现简单的记事本

利用Python开发实现简单的记事本

四、编辑模块的实现

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

def cut():
  textpad.event_generate('<<Cut>>')

def copy():
  textpad.event_generate('<<Copy>>')

def paste():
  textpad.event_generate('<<Paste>>')

def redo():
  textpad.event_generate('<<Redo>>')

def undo():
  textpad.event_generate('<<Undo>>')

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实现网页链接提取的方法分享
Feb 25 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
详解Python命令行解析工具Argparse
Apr 20 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
使用tensorflow实现AlexNet
Nov 20 Python
python3+PyQt5重新实现QT事件处理程序
Apr 19 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
python flask中动态URL规则详解
Nov 22 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 #Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 #Python
Python字典简介以及用法详解
Nov 15 #Python
python xml解析实例详解
Nov 14 #Python
python入门基础之用户输入与模块初认识
Nov 14 #Python
详解Python多线程
Nov 14 #Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 #Python
You might like
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
JQuery的一些小应用收集
2010/03/27 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
python hough变换检测直线的实现方法
2019/07/12 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Python读写锁实现实现代码解析
2020/11/28 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
大一军训感言
2014/01/09 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
导游词怎么写
2015/02/04 职场文书
开票员岗位职责
2015/02/12 职场文书
实习生辞职信范文
2015/03/02 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang