用Python中的Tkinter模块写的一个简单的记事本程序,Python2.x和Python3.x的许多内置函数有所改变,所以以下分为Python2.x和Python3.x版本。
一.效果展示:
二.Python3.x版本的记事本程序
1 #创建一个记事本 2 #__author__='ZhangP' 3 #-*- encoding:utf8 -*- 4 5 from tkinter import * 6 import tkinter.messagebox 7 import tkinter.filedialog 8 import os 9 10 11 root=Tk() 12 root.title('ZP Node') 13 14 #初始大小显示以及定位位置,注意一定要使用x而非* 15 root.geometry("800x500+100+100") 16 17 filename='' 18 19 #定义版权子菜单对应的相关函数 20 def author(): 21 22 tkinter.messagebox.askokcancel('作者信息','本软件由加油AlwaysWin开发') 23 24 25 def about(): 26 27 tkinter.messagebox.askokcancel('版权信息.Copyright','本软件没有版权,随便用') 28 29 #定义文件子菜单对应的相关函数 30 def openfile(): 31 global filename 32 filename=tkinter.filedialog.askopenfilename(defaultextension = '.txt') 33 34 if filename == '': 35 filename=None 36 else: 37 root.title('FileName:'+os.path.basename(filename)) 38 textPad.delete(1.0,END) 39 f=open(filename,'r',encoding='utf-8') #注意后面要加上读取的编码格式,否则报编码错误 40 textPad.insert(1.0,f.read()) 41 f.close() 42 43 def new(): 44 global filename 45 root.title("未命名文件") 46 filename=None 47 textPad.delete(1.0,END) 48 49 def save(): 50 global filename 51 try: 52 f=open(filename,'w') 53 msg=textPad.get(1.0,END) 54 f.write(msg) 55 f.close() 56 except: 57 saveas() 58 59 def saveas(): 60 f=tkinter.filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt') 61 global filename 62 filename=f 63 fh=open(f,'w') 64 msg=textPad.get(1.0,END) 65 fh.write(msg) 66 fh.close() 67 root.title('FileName:'+os.path.basename(f)) 68 69 #创建编辑子菜单的对应函数 70 def cut(): 71 textPad.event_generate('<<Cut>>') 72 73 def copy(): 74 textPad.event_generate('<<Copy>>') 75 76 def paste(): 77 textPad.event_generate('<<Paste>>') 78 79 def redo(): 80 textPad.event_generate('<<Redo>>') 81 82 def undo(): 83 textPad.event_generate('<<Undo>>') 84 85 def selectAll(): 86 textPad.tag_add('sel','1.0',END) 87 88 def search(): 89 topsearch=Toplevel(root) 90 topsearch.geometry('300x30+200+250') 91 label1=Label(topsearch,text='Find') 92 label1.grid(row=0,column=0,padx=5) 93 entry1=Entry(topsearch,width=20) 94 entry1.grid(row=0,column=1,padx=5) 95 button1=Button(topsearch,text='查找') 96 button1.grid(row=0,column=2) 97 #创建主菜单 98 99 menubar=Menu(root) 100 root.config(menu=menubar) 101 102 #创建文件子菜单 103 filemenu=Menu(menubar) 104 105 filemenu.add_command(label='新建',accelerator='Ctrl+N',command=new) 106 filemenu.add_command(label='打开',accelerator='Ctrl+O',command=openfile) 107 filemenu.add_command(label='保存',accelerator='Ctrl+S',command=save) 108 filemenu.add_command(label='另存为',accelerator='Ctrl+Shift+S',command=saveas) 109 menubar.add_cascade(label='文件',menu=filemenu) 110 111 #创建编辑子菜单 112 editmenu=Menu(menubar) 113 editmenu.add_command(label='撤消',accelerator='Ctrl+z',command=undo) 114 editmenu.add_command(label='重做',accelerator='Ctrl+y',command=redo) 115 #添加分割线 116 editmenu.add_separator() 117 editmenu.add_command(label='剪切',accelerator='Ctrl+X',command=cut) 118 editmenu.add_command(label='复制',accelerator='Ctrl+C',command=copy) 119 editmenu.add_command(label='粘贴',accelerator='Ctrl+V',command=paste) 120 editmenu.add_separator() 121 editmenu.add_command(label='查找',accelerator='Ctrl+F',command=search) 122 editmenu.add_command(label='全选',accelerator='Ctrl+A',command=selectAll) 123 menubar.add_cascade(label='编辑',menu=editmenu) 124 125 #添加版权子菜单 126 aboutmenu=Menu(menubar) 127 aboutmenu.add_command(label='作者',command=author) 128 aboutmenu.add_command(label='版权',command=about) 129 menubar.add_cascade(label='关于',menu=aboutmenu) 130 131 132 #添加工具栏 133 toolbar=Frame(root,height=25,bg='light sea green') 134 shortButton=Button(toolbar,text='打开',command=openfile) 135 shortButton.pack(side=LEFT,padx=5,pady=5) 136 137 shortButton=Button(toolbar,text='保存',command=save) 138 shortButton.pack(side=LEFT) 139 toolbar.pack(expand=NO,fill=X) 140 141 #添加状态栏 142 status=Label(root,text="Ln20",bd=1,relief=SUNKEN,anchor=W) 143 status.pack(side=BOTTOM,fill=X) 144 145 #添加编辑界面以及滚动条 146 lnlabel=Label(root,width=2,bg='antique white') 147 lnlabel.pack(side=LEFT,fill=Y) 148 149 textPad=Text(root,undo=True) 150 textPad.pack(expand=YES,fill=BOTH) 151 152 scroll=Scrollbar(textPad) 153 textPad.config(yscrollcommand=scroll.set) 154 scroll.config(command=textPad.yview) 155 scroll.pack(side=RIGHT,fill=Y) 156 157 #显示页面 158 root.mainloop()
三.Python2.x版本的记事本程序
1 #创建一个记事本 2 #__author__='ZhangP' 3 #-*- encoding:utf8 -*- 4 5 from Tkinter import * 6 from tkMessageBox import * 7 from tkFileDialog import * 8 import os 9 10 11 root=Tk() 12 root.title('ZP Node') 13 14 #初始大小显示以及定位位置,注意一定要使用x而非* 15 root.geometry("800x500+100+100") 16 filename='' 17 18 #定义版权对应的相关函数 19 def author(): 20 showinfo('作者信息','本软件由加油AlwaysWin开发') 21 22 def about(): 23 showinfo('版权信息.Copyright','本软件没有版权,随便用') 24 25 #定义文件子菜单对应的相关函数 26 def openfile(): 27 global filename 28 filename=askopenfilename(defaultextension = '.txt') 29 30 if filename == '': 31 filename=None 32 else: 33 root.title('FileName:'+os.path.basename(filename)) 34 textPad.delete(1.0,END) 35 f=open(filename,'r') 36 textPad.insert(1.0,f.read()) 37 f.close() 38 39 def new(): 40 global filename 41 root.title("未命名文件") 42 filename = None 43 textPad.delete(1.0, END) 44 def save(): 45 global filename 46 try: 47 f=open(filename,'w') 48 msg=textPad.get(1.0,END) 49 f.write(msg) 50 f.close() 51 except: 52 saveas() 53 54 def saveas(): 55 f=asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt') 56 global filename 57 filename=f 58 fh=open(f,'w') 59 msg=textPad.get(1.0,END) 60 fh.write(msg) 61 fh.close() 62 root.title('FileName:'+os.path.basename(f)) 63 64 #创建编辑子菜单的对应函数 65 def cut(): 66 textPad.event_generate('<<Cut>>') 67 68 def copy(): 69 textPad.event_generate('<<Copy>>') 70 71 def paste(): 72 textPad.event_generate('<<Paste>>') 73 74 def redo(): 75 textPad.event_generate('<<Redo>>') 76 77 def undo(): 78 textPad.event_generate('<<Undo>>') 79 80 def selectAll(): 81 textPad.tag_add('sel','1.0',END) 82 83 def search(): 84 topsearch=Toplevel(root) 85 topsearch.geometry('300x30+200+250') 86 label1=Label(topsearch,text='Find') 87 label1.grid(row=0,column=0,padx=5) 88 entry1=Entry(topsearch,width=20) 89 entry1.grid(row=0,column=1,padx=5) 90 button1=Button(topsearch,text='查找') 91 button1.grid(row=0,column=2) 92 #创建主菜单 93 94 menubar=Menu(root) 95 root.config(menu=menubar) 96 97 #创建文件子菜单 98 filemenu=Menu(menubar) 99 100 filemenu.add_command(label='新建',accelerator='Ctrl+N',command=new) 101 filemenu.add_command(label='打开',accelerator='Ctrl+O',command=openfile) 102 filemenu.add_command(label='保存',accelerator='Ctrl+S',command=save) 103 filemenu.add_command(label='另存为',accelerator='Ctrl+Shift+S',command=saveas) 104 menubar.add_cascade(label='文件',menu=filemenu) 105 106 #创建编辑子菜单 107 editmenu=Menu(menubar) 108 editmenu.add_command(label='撤消',accelerator='Ctrl+z',command=undo) 109 editmenu.add_command(label='重做',accelerator='Ctrl+y',command=redo) 110 #添加分割线 111 editmenu.add_separator() 112 editmenu.add_command(label='剪切',accelerator='Ctrl+X',command=cut) 113 editmenu.add_command(label='复制',accelerator='Ctrl+C',command=copy) 114 editmenu.add_command(label='粘贴',accelerator='Ctrl+V',command=paste) 115 editmenu.add_separator() 116 editmenu.add_command(label='查找',accelerator='Ctrl+F',command=search) 117 editmenu.add_command(label='全选',accelerator='Ctrl+A',command=selectAll) 118 menubar.add_cascade(label='编辑',menu=editmenu) 119 120 #添加版权子菜单 121 aboutmenu=Menu(menubar) 122 aboutmenu.add_command(label='作者',command=author) 123 aboutmenu.add_command(label='版权',command=about) 124 menubar.add_cascade(label='关于',menu=aboutmenu) 125 126 127 #添加工具栏 128 toolbar=Frame(root,height=25,bg='light sea green') 129 shortButton=Button(toolbar,text='打开',command=openfile) 130 shortButton.pack(side=LEFT,padx=5,pady=5) 131 132 shortButton=Button(toolbar,text='保存',command=save) 133 shortButton.pack(side=LEFT) 134 toolbar.pack(expand=NO,fill=X) 135 136 #添加状态栏 137 status=Label(root,text="Ln20",bd=1,relief=SUNKEN,anchor=W) 138 status.pack(side=BOTTOM,fill=X) 139 140 #添加编辑界面以及滚动条 141 lnlabel=Label(root,width=2,bg='antique white') 142 lnlabel.pack(side=LEFT,fill=Y) 143 144 textPad=Text(root,undo=True) 145 textPad.pack(expand=YES,fill=BOTH) 146 147 scroll=Scrollbar(textPad) 148 textPad.config(yscrollcommand=scroll.set) 149 scroll.config(command=textPad.yview) 150 scroll.pack(side=RIGHT,fill=Y) 151 152 #显示页面 153 root.mainloop()