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返回昨天日期的方法
May 13 Python
python实时分析日志的一个小脚本分享
May 07 Python
Python实现的多线程同步与互斥锁功能示例
Nov 30 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
深入解析神经网络从原理到实现
Jul 26 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
Python用户自定义异常的实现
Dec 25 Python
python中numpy.empty()函数实例讲解
Feb 05 Python
python自动化之如何利用allure生成测试报告
May 02 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 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
php while循环控制的简单实例
2016/05/30 PHP
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
python3判断IP地址的方法
2021/03/04 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
水电工岗位职责
2014/02/12 职场文书
政府会议通知范文
2015/04/15 职场文书
2019大学生实习报告
2019/06/21 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL