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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
10款最好的Web开发的 Python 框架
Mar 18 Python
python计算两个数的百分比方法
Jun 29 Python
Python 生成 -1~1 之间的随机数矩阵方法
Aug 04 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
python调用staf自动化框架的方法
Dec 26 Python
Python实现图片识别加翻译功能
Dec 26 Python
Python实现计算图像RGB均值方式
Jun 04 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
Python数据分析入门之教你怎么搭建环境
May 13 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
php 接口类与抽象类的实际作用
2009/11/26 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
PHP中的事务使用实例
2015/05/26 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
HR喜欢的自荐信格式
2013/10/08 职场文书
品管员岗位职责
2013/11/10 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2015年保卫科工作总结
2015/05/14 职场文书