利用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 03 Python
在Django的session中使用User对象的方法
Jul 23 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python raise的基本使用
Sep 10 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 Python
Python机器学习三大件之一numpy
May 10 Python
Python基于百度AI实现抓取表情包
Jun 27 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&amp;java(三)
2006/10/09 PHP
谈谈PHP的输入输出流
2007/02/14 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
Javascript 按位与赋值运算符 (&amp;=)使用介绍
2014/02/04 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python list格式数据excel导出方法
2018/10/31 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
python 实现return返回多个值
2019/11/19 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
python3的pip路径在哪
2020/06/23 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
产品推广策划方案
2014/05/10 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python
JavaScript canvas实现流星特效
2021/05/20 Javascript
基于Python实现股票收益率分析
2022/04/02 Python