利用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学习手册中的python多态示例代码
Jan 21 Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
python网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
Python Numpy库常见用法入门教程
Jan 16 Python
高考考python编程是真的吗
Jul 20 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
记录Django开发心得
2014/07/16 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
详解Python自建logging模块
2018/01/29 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
Django密码存储策略分析
2020/01/09 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
晚归检讨书
2014/02/19 职场文书
心灵捕手观后感
2015/06/02 职场文书