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多层嵌套list的递归处理方法(推荐)
Jun 08 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
python实现图片处理和特征提取详解
Nov 13 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
python同步windows和linux文件
Aug 29 Python
Python中断多重循环的思路总结
Oct 04 Python
python模块常用用法实例详解
Oct 17 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
Python while true实现爬虫定时任务
Jun 08 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 Python
python 实现ping测试延迟的两种方法
Dec 10 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
法律专业推荐信范文
2013/11/29 职场文书
寒假思想汇报
2014/01/10 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
技术股东合作协议书
2014/12/02 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python