以下内容参考《辛星tkinter教程第二版》:

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做简易记事本的更多相关文章

  1. Python编写简易木马程序(转载乌云)

    Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能 ...

  2. 《winform窗体应用程序》----------简易记事本

    首先先给大家发表几张图片,描述一下记事本程序要实现的功能以及界面设计. 以上这些就是简易记事本的的主界面设计. 下面我们来做一些简单的讲解: 1.使用MenuStrip控件来实现菜单栏的基本设计. 在 ...

  3. Android简易记事本

    此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下: 具体操作就是长按可以删除操作,点击可以进行修改, ...

  4. python做量化交易干货分享

    http://www.newsmth.NET/nForum/#!article/Python/128763 最近程序化交易很热,量化也是我很感兴趣的一块. 国内量化交易的平台有几家,我个人比较喜欢用的 ...

  5. What exactly can you do with Python? Here are Python’s 3 main applications._你能用Python做什么?下面是Python的3个主要应用程序。

    原文链接 Github地址 一.陈述 1,我到底能用Python做什么? 我观察注意到Python三个主要流行的应用: 网站开发: 数据科学——包括机器学习,数据分析和数据可视化: 做脚本语言. 二. ...

  6. Java图形界面开发—简易记事本

          在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: ...

  7. 使用python做科学计算

    这里总结一个guide,主要针对刚开始做数据挖掘和数据分析的同学 说道统计分析工具你一定想到像excel,spss,sas,matlab以及R语言.R语言是这里面比较火的,它的强项是强大的绘图功能以及 ...

  8. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册       首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...

  9. [原创博文] 用Python做统计分析 (Scipy.stats的文档)

    [转自] 用Python做统计分析 (Scipy.stats的文档) 对scipy.stats的详细介绍: 这个文档说了以下内容,对python如何做统计分析感兴趣的人可以看看,毕竟Python的库也 ...

随机推荐

  1. mysql下监测数据库语句creating sort index时间过长的问题

    在一张单表5000W数据上进行数据查询时传入两个单列索引条件,进行组合索引查询时,如果最后有order by id排序,与去除该排序,性能差距接近两个数量级 结论:在使用列的默认排序时,不应该再ord ...

  2. windows的iis做后门,隐藏访问,无日志

    windows下的iis5/iis6做后门,隐藏访问,不留访问记录或者不留日志 好不容易攻下一台Windows2000/2003 IIS服务器,你一定会想,怎样才能长期占有这个“肉鸡”呢?聪明的你肯定 ...

  3. ORACLE数据库导表

    今天在公司的server上面装一个系统,在数据库导表的时候一直导不进去,原先是10g的.dmp文件,导入11g.怀疑版本号不兼容,后来把.dmp表打开,把里面的版本号号改为11g,发现导入还是不行.i ...

  4. vs 已经加入了引用,编译还是提示没有加入引用

    已经加入了引用,可是.编译还是通只是. 原因:项目总体框架是.Net FramWork4.5,nep中的框架也是4.5.而编译只是的project是4.0. 解决的方法:将编译只是的项目框架改为4.5

  5. websocket-client connection( Long-lived )

    参考:https://pypi.python.org/pypi/websocket-client/ import websocket import thread import time def on_ ...

  6. WebClient禁止自动重定向

    代码如下: public class MyWebClient : WebClient { public bool AllowAutoRedirect { get; set; } = true; pro ...

  7. 配置Spring的用于解决懒加载问题的过滤器

    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" ...

  8. onscreen and offscreen

    本文来自stackoverflow一位网友的解答,感觉非常不错就摘录了. --------------------------------------------------------------- ...

  9. POJ3182 The Grove[射线法+分层图最短路]

    The Grove Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 904   Accepted: 444 Descripti ...

  10. 【BZOJ4999】This Problem Is Too Simple! 离线+树状数组+LCA

    [BZOJ4999]This Problem Is Too Simple! Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2 ...