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入门篇之字符串
Oct 17 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
Python实现的本地文件搜索功能示例【测试可用】
May 30 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
python设定并获取socket超时时间的方法
Jan 12 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
PHP 变量的定义方法
2010/01/26 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python实现的快速排序算法详解
2017/08/01 Python
Python中property属性实例解析
2018/02/10 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
python开发一款翻译工具
2020/10/10 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
Java程序员面试题
2013/07/15 面试题
如何执行一个shell程序
2012/11/23 面试题
企业总经理职责
2014/02/02 职场文书
机关出纳岗位职责
2014/04/03 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
校园元旦活动总结
2014/07/09 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python