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 相关文章推荐
Python3.2中Print函数用法实例详解
May 19 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
使用Python Pandas处理亿级数据的方法
Jun 24 Python
Python logging设置和logger解析
Aug 28 Python
python实现图片上添加图片
Nov 26 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
Python爬虫 简单介绍一下Xpath及使用
Apr 26 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
十天学会php(1)
2006/10/09 PHP
文章推荐系统(三)
2006/10/09 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
一封普通求职者的求职信
2013/11/20 职场文书
幼儿园毕业教师感言
2014/02/21 职场文书
售后服务承诺书范文
2014/03/26 职场文书
大学生就业求职信
2014/06/12 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
酒店辞职书范文
2015/02/26 职场文书
应聘教师自荐信
2015/03/26 职场文书
公司捐书倡议书
2015/04/27 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL
golang操作rocketmq的示例代码
2022/04/06 Golang
nginx配置指令之server_name的具体使用
2022/08/14 Servers