利用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中chr、unichr、ord字符函数之间的对比
Jun 16 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
Php多进程实现代码
May 07 Python
Python实现基于C/S架构的聊天室功能详解
Jul 07 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
Python3 实现减少可调用对象的参数个数
Dec 20 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
python安装第三方库如xlrd的方法
Oct 31 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
Python中生成ndarray实例讲解
Feb 22 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
德生9700DX电路分析
2021/03/02 无线电
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
JS 树形递归实例代码
2010/05/18 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
python爬取个性签名的方法
2018/06/17 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
《绿色蝈蝈》教学反思
2014/03/02 职场文书
2015年宣传工作总结
2015/04/08 职场文书
期中考试后的感想
2015/08/07 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang