侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   443

前言

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

示例图

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

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

一、整体框架构建

1.三个主模块的建立

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

#-*-encoding:utf8from Tkinter import *root = Tk()root.title('Benben Node')#create menumenubar = 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并设定合适的间距,对应的代码如下:

#toolbartoolbar = 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")

编辑状态栏的代码:

#statusbarstatus = 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('<<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解析excel文件存入sqlite数据库的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客