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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
Python存取XML的常见方法实例分析
Mar 21 Python
关于Python 3中print函数的换行详解
Aug 08 Python
python之virtualenv的简单使用方法(必看篇)
Nov 25 Python
Python实现查看系统启动项功能示例
May 10 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
django 模型中的计算字段实例
May 19 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
python tkinter Entry控件的焦点移动操作
May 22 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
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
python实现2048小游戏
2015/03/30 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python 2.7.14安装图文教程
2018/04/08 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
python实现黑客字幕雨效果
2018/06/21 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
周鸿祎:教你写创业计划书
2013/12/30 职场文书
高二英语教学反思
2014/01/19 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
党风廉设责任书
2014/04/16 职场文书
医疗纠纷协议书
2014/04/16 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
老员工辞职信范文
2015/05/12 职场文书
结婚典礼主持词
2015/06/29 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
如何Tomcat中使用ipv6地址
2022/05/06 Servers