python 实现简易的记事本


Posted in Python onNovember 30, 2020

运行效果

python 实现简易的记事本

完整代码

from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
import os
filename=''
def author():
  showinfo('大道至简','简易记事本第一版')

def power():
  showinfo('版权信息','本公司保留版权信息,不可以把本软件用于商业目的!')
def myopen():
  global filename
  filename=askopenfilename(defaultextension='.txt')
  if filename=='':
    filename=None
  else:
    root.title('简易记事本'+os.path.basename(filename))
    textPad.delete(1.0,END)
    f=open(filename,'r')
    textPad.insert(1.0,f.read())
    f.close()


def new():
  global root,filename,textPad
  root.title('未命名文件')
  filename=None
  textPad.delete(1.0,END)

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=asksaveasfile(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('简易记事本'+os.path.basename(f))
def cut():
  global textPad
  textPad.event_generate('<<Cut>>')
def copy():
  global textPad
  textPad.event_generate('<<Copy>>')
def paste():
  global textPad
  textPad.event_generate('<<Paste>>')


def undo():
  global textPad
  textPad.event_generate('<<Undo>>')
def redo():
  global textPad
  textPad.event_generate('<<Redo>>')
def select_all():
  global textPad
  textPad.tag_add('sel','1.0','end')
def find():
  global root
  t=Toplevel(root)
  t.title('查找')
  t.geometry('260x60+200+250')
  t.transient(root)
  Label(t,text='查找:').grid(row=0,column=0,sticky='e')
  v=StringVar()
  e=Entry(t,width=20,textvariable=v)
  e.grid(row=0,column=1,padx=2,pady=2,sticky='we')
  e.focus_set()
  c=IntVar()
  Checkbutton(t,text='不区分大小写',variabel=c).grid(row=1,column=1,sticky='e')
  Button(t,text='查找所有',command=lambda :search(v.get(),c.get(),textPad,t,e)).grid(row=0,
    column=2,sticky='e'+'w',padx=2,pady=2)
def close_search():
  textPad.tag_remove('match','1.0',END)
  t.destroy()
  t.protocol('WM_DELETE_WINDOW',close_search)#???

def search(needle,cssnstv,textPad,t,e):
  textPad.tag_remove('match','1.0',END)
  count=0
  if needle:
    pos='1.0'
    while True:
      pos=textPad.search(needle,pos,nocase=cssnstv,stopindex=END)
      if not pos:break
      lastpos=pos+str(len(needle))
      textPad.tag_add('match',pos,lastpos)
      count+=1
      pos=lastpos
    textPad.tag_config('match',foreground='yellow',background='green')
    e.focus_set()
    t.title(str(count)+'个被匹配')

def popup(event):
  global editmenu
  editmenu.tk_popup(event.x_root,event.y_root)
root=Tk()
root.title('简易记事本第一版')
root.geometry('300x300+100+100')#geometry(wxh+xoffset+yoffset)
menubar=Menu(root)#制作菜单实例,依附于父窗口root上面

filemenu=Menu(menubar)#制作文件菜单项,依附于menubar菜单上面
menubar.add_cascade(label='文件',menu=filemenu)#增加分层菜单
filemenu.add_command(label='新建',accelerator='Ctrl+N',command=new)
filemenu.add_command(label='打开',accelerator='Ctrl+O',command=myopen)
filemenu.add_command(label='保存',accelerator='Ctrl+S',command=save)
filemenu.add_command(label='另存为',accelerator='Ctrl+Alt+S',command=saveas)

editmenu=Menu(menubar)#制作编辑菜单项,依附于menubar菜单上面
menubar.add_cascade(label='编辑',menu=editmenu)
editmenu.add_command(label='撤销',accelerator='Ctrl+Z',command=undo)
editmenu.add_command(label='重做',accelerator='Ctrl+Y',command=redo)
editmenu.add_command(label='剪切',accelerator='Ctrl+X',command=cut)
editmenu.add_command(label='复制',accelerator='Ctrl+C',command=copy)
editmenu.add_command(label='粘贴',accelerator='Ctrl+V',command=paste)
editmenu.add_separator()
editmenu.add_command(label='查找',accelerator='Ctrl+F',command=find)
editmenu.add_command(label='全选',accelerator='Ctrl+A',command=select_all)

aboutmenu=Menu(menubar)#制作关于菜单项,依附于menubar菜单上面
menubar.add_cascade(label='关于',menu=aboutmenu)#增加分层菜单
aboutmenu.add_command(label='作者',command=author)
aboutmenu.add_command(label='版权',command=power)
root.config(menu=menubar)
shortcutbar=Frame(root,height=25,bg='light sea green')
shortcutbar.pack(expand=NO,fill=X)
Inlabel=Label(root,width=2,bg='antique white')
Inlabel.pack(side=LEFT,anchor='nw',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)

textPad.bind('<Control-N>',new)
textPad.bind('<Control-n>',new)
textPad.bind('<Control-O>',myopen)
textPad.bind('<Control-o>',myopen)
textPad.bind('<Control-S>',save)
textPad.bind('<Control-s>',save)
textPad.bind('<Control-A>',select_all)
textPad.bind('<Control-a>',select_all)
textPad.bind('<Control-f>',find)
textPad.bind('<Control-F>',find)
textPad.bind('<Control-3>',popup)

root.mainloop()

以上就是python 实现简易的记事本的详细内容,更多关于python 实现记事本的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的面向对象编程详解(上)
Apr 13 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
Python中sys模块功能与用法实例详解
Feb 26 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
python 爬虫请求模块requests详解
Dec 04 Python
python中numpy数组与list相互转换实例方法
Jan 29 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
Python中的datetime包与time包包和模块详情
Feb 28 Python
详解pycharm自动import所需的库的操作方法
Nov 30 #Python
Django REST Framework 分页(Pagination)详解
Nov 30 #Python
python代码实现猜拳小游戏
Nov 30 #Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 #Python
python 如何引入协程和原理分析
Nov 30 #Python
Django缓存Cache使用详解
Nov 30 #Python
Django框架实现在线考试系统的示例代码
Nov 30 #Python
You might like
优化使用mysql存储session的php代码
2008/01/10 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
Javascript调试工具(下载)
2007/01/09 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
关于Python的一些学习总结
2018/05/25 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
学python需要去培训机构吗
2020/07/01 Python
计算机网络专业个人的自我评价
2013/10/17 职场文书
小学毕业感言500字
2014/02/28 职场文书
环保项目建议书
2014/08/26 职场文书
怎样写家长意见
2015/06/04 职场文书