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的PEAK来适配协议的教程
Apr 14 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
Python实现XML文件解析的示例代码
Feb 05 Python
详谈python中冒号与逗号的区别
Apr 18 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
python try 异常处理(史上最全)
Mar 07 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
Python的互斥锁与信号量详解
Sep 12 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
使用python实现学生信息管理系统
Feb 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
php中的一个中文字符串截取函数
2007/02/14 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
javascript实现yield的方法
2013/11/06 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
写给小白看的JavaScript异步
2017/11/29 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
Python读取键盘输入的2种方法
2015/06/16 Python
python实现数据图表
2017/07/29 Python
Python实现购物车功能的方法分析
2017/11/10 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
Python 学习教程之networkx
2019/04/15 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Java里面有没有全局变量?为什么?
2015/02/06 面试题
一份Java笔试题
2012/02/21 面试题
市场营销管理制度
2014/01/29 职场文书
舞蹈比赛获奖感言
2014/02/04 职场文书
四年大学自我鉴定
2014/02/17 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
研讨会主持词
2014/04/02 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
会员卡清退活动总结
2014/08/27 职场文书
学校党员干部承诺书
2015/05/04 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS