1、通过设计一个文本编辑器演示了演示了菜单、文本框、文本对话框等组件的用法 实现了打开文件,保存文件,另存文件以及文本复制、剪切、粘贴和查找等功能
''' 通过设计一个文本编辑器演示了演示了菜单、文本框、文本对话框等组件的用法 实现了打开文件,保存文件,另存文件以及文本复制、剪切、粘贴和查找等功能 ''' #创建应用程序窗口 import tkinter import tkinter.messagebox import tkinter.filedialog import tkinter.scrolledtext import tkinter.simpledialog import tkinter.scrolledtext app = tkinter.Tk() app.title('罗式文本编辑器') app['width'] = 800 app['height'] = 600 textChanged = tkinter.IntVar(value=0) #当前文件名 filename = '' #创建菜单 menu = tkinter.Menu(app) #File子菜单 submenu = tkinter.Menu(menu,tearoff=0) def Open(): global filename #如果内容已改变,先保存 if textChanged.get(): yesno = tkinter.messagebox.askyesno(title='Save or not?',message='Do you want to save?') if yesno == tkinter.YES: Save() filename = tkinter.filedialog.askopenfilename(title='Open file',filetypes=[('Text files','*.txt')]) if filename: #清空内容,位置0.0是lineNumber.Colum的表示方法,表示行号和列号 txtContent.delete(0.0,tkinter.END) fp = open(filename,'r') txtContent.insert(tkinter.INSERT,''.join(fp.readlines())) fp.close() #标记为尚未标记 textChanged.set(0) #创建Open菜单并绑定菜单事件处理函数 submenu.add_command(label='Open',command=Open) def Save(): global filename #如果是第一次保存新建文件,则打开‘另存为’窗口 if not filename: SaveAs() #如果内容发生了改变,保存,可以使用with关键字改写文件操作代码 elif textChanged.get(): fp = open(filename,'w') fp.write(txtContent.get(0.0,tkinter.END)) fp.close() textChanged.set(0) submenu.add_command(label='Save',command=Save) def SaveAs(): global filename #打开另存为窗口 #tkiner.asksaveasfilename()打开保存窗口,用户再保存窗口中输入了保存地址,就会传递给newfilename newfilename = tkinter.filedialog.asksaveasfilename(title='Save As',initialdir=r'C:\\',initialfile='new.txt') #如果指定了文件名,则保存文件夹,可以使用with改写 if newfilename: fp = open(newfilename,'w') fp.write(txtContent.get(0.0,tkinter.END)) fp.close() filename = newfilename textChanged.set(0) submenu.add_command(label='Save As',command=SaveAs) #添加分割线 submenu.add_separator() def Close(): global filename Save() txtContent.delete(0.0,tkinter.END) #置空文件名 filename='' submenu.add_command(label='Close',command=Close) #将子菜单关联道主菜单上 menu.add_cascade(label='File',menu=submenu) #Edit子菜单 submenu = tkinter.Menu(menu,tearoff=0) #撤销最后一次操作 def Undo(): #启用undo标志 txtContent['undo'] = True try: txtContent.edit_undo() except Exception as e: pass submenu.add_command(label='Undo',command=Undo) def Redo(): txtContent['undo'] = True try: txtContent.edit_redo() except Exception as e: pass submenu.add_command(label='Redo',command=Redo) submenu.add_separator() def Copy(): txtContent.clipboard_clear() txtContent.clipboard_append(txtContent.selection_get()) submenu.add_command(label='Copy',command=Copy) def Cut(): Copy() #删除所选内容 txtContent.delete(tkinter.SEL_FIRST,tkinter.SEL_LAST) submenu.add_command(label='Cut',command=Cut) def Paste(): #如果没有选中内容,则直接粘贴复制道鼠标位置 #如果所选内容,则线删除再粘贴 try: txtContent.insert(tkinter.SEL_FIRST,txtContent.clipboard_get()) txtContent.delete(tkinter.SEL_FIRST,tkinter.SEL_LAST) #如果粘贴成功就结束本函数,以免异常处理结构执行完成之后再次粘贴 return except Exception as e: pass txtContent.insert(tkinter.INSERT,txtContent.clipboard_get()) submenu.add_command(label='Paste',command=Paste) submenu.add_separator() def Search(): #获取要查找的内容 textToSearch = tkinter.simpledialog.askstring(title='Search',prompt='What to search?') start = txtContent.search(textToSearch,0.0,tkinter.END) if start: tkinter.messagebox.showinfo(title='Found',message='Ok') submenu.add_command(label='Search',command=Search) menu.add_cascade(label='Edit',menu=submenu) #Help子菜单 submenu = tkinter.Menu(menu,tearoff=0) def About(): tkinter.messagebox.showinfo(title='About',message='Author:luo') submenu.add_command(label='About',command=About) menu.add_cascade(label='Help',menu=submenu) #将创建的文件夹关联道应用程序窗口 app.config(menu=menu) #创建文件编辑组件,并自动适应窗口大小 txtContent = tkinter.scrolledtext.ScrolledText(app,wrap=tkinter.WORD) txtContent.pack(fill=tkinter.BOTH,expand=tkinter.YES) #按压方法 def KeyPress(event): textChanged.set(1) #这里做了一个事件,只要点击了编辑框,就会调用KeyPress方法 #这个方法,将textChaged.set的值,设置为1 txtContent.bind('<KeyPress>',KeyPress) app.mainloop()
标签:submenu,文本编辑,tkinter,txtContent,label,add,command From: https://www.cnblogs.com/buchijiuminvhai/p/17023727.html