python 简单的文本编辑器

-- coding: utf-8 --

“”"
Spyder Editor

@author: 你是不是在坐飞机
“”"

from tkinter import*
import tkinter as tk
import os
import tkinter.filedialog
import tkinter.colorchooser
import tkinter.scrolledtext as tst
class Application(tk.Frame):#定义GUI应用程序类,派生于Rrame类
loc = None
def init(self,master=None):#构造函数,master为父窗口
tk.Frame.init(self,master)#调用父类的构造函数
self.loc = tk.StringVar()
self.grid()#调用组件的grid方法,调整其显示位置和大小
self.createToolbar()#调用对象方法,创建工具栏
self.createWidgets()#调用对象方法,创建子组件
self.createMenu()#调用对象方法,创建菜单
#self.ceateStatus()#调用对象方法。创建状态栏
root[‘menu’] = self.menubar#附加主菜单到根窗口
#root.bind(’’,self.f_Loc)
root.bind(’’,self.f_Loc)
root.bind(’’,lambda event: self.f_new())
root.bind("",lambda event: self.f_open())
root.bind("",lambda event: self.f_save())
root.bind("",lambda event: self.f_cut())
root.bind("",lambda event: self.f_exit())
root.bind("",lambda event: self.f_delete())
root.bind(’’,self.f_popup)#绑定事件
def createWidgets(self):#对象方法:创建子组件
self.textEdit = tst.ScrolledText(self,width=80,height=25)#创建Text组件
self.textEdit.grid(row=2,column=0,rowspan=7,sticky=tk.S)#Text组建置于0行0列跨6行
self.label = tk.Label(root, textvariable=self.loc, anchor=‘c’).grid(sticky=tk.S)#状态栏
self.btnOpen=tk.Button(self,width=0)
self.btnOpen.grid(row=0,column=0,rowspan=1)
def createMenu(self):#对象方法:创建菜单
self.menubar = tk.Menu(root)#创建主菜单栏menubar
#创建子菜单
self.menufile = tk.Menu(self.menubar)#创建菜单menufile
self.menuedit = tk.Menu(self.menubar,tearoff=0)#创建菜单menuedit
self.menuhelp = tk.Menu(self.menubar,tearoff=0)#创建菜单menuhelp
self.menubar.add_cascade(label=‘File’,menu=self.menufile)
self.menubar.add_cascade(label=“Edit”,menu=self.menuedit)
self.menubar.add_cascade(label=‘help’,menu=self.menuhelp)
#添加菜单项
self.menufile.add_command(label=‘New’,command=self.f_new,accelerator=‘Ctrl+N’)#File-New
self.menufile.add_command(label=‘Open’,command=self.f_open,accelerator=‘Ctrl+O’)#File-Open
self.menufile.add_command(label=‘Save’,accelerator=‘Ctrl+S’,command=self.f_save)#File-Save
self.menufile.add_separator()#分隔符
self.menufile.add_command(label=‘Exit’, command=self.f_exit, accelerator=‘Ctrl+E’)#File-Exit
self.menuedit.add_command(label=“Cut”, command=self.f_cut, accelerator=‘Ctrl+X’)#Edit-Cut
self.menuedit.add_command(label=“Copy”, command=self.f_copy, accelerator=‘Ctrl+C’)#Edit-Copy
self.menuedit.add_command(label=“Paste”, command=self.f_paste, accelerator=‘Ctrl+V’)#Edit-Paste
self.menuedit.add_command(label=“Delete”, command=self.f_delete, accelerator=‘Ctrl+D’)#Edit-Paste
self.menuhelp.add_command(label=“About”, command=self.f_about)#Edit-About
def f_new(self):#定义事件处理程序:File-New
self.textEdit.delete(1.0,tk.END)#清空TEXT组件的内容
root.title(“untitle”)
def f_open(self):#定义事件处理程序:File-Opne
self.textEdit.delete(1.0,tk.END)#清空TEXT组件内容
fname=tk.filedialog.askopenfilename(filetypes=[(‘Python源文件’,’.py’)])
with open(fname,‘r’,encoding=‘utf-8’) as f1:#打开文件
str1 = f1.read()#读入文件内容
self.textEdit.insert(0.0,str1)#插入内容到Text组件
root.title(os.path.basename(fname))
def f_save(self):#定义事件处理程序:File-Save
str1 = self.textEdit.get(1.0,tk.END)#获取Text组件中全部内容
fname=tk.filedialog.asksaveasfilename(filetypes=[(‘Python源文件’,’.py’)])
with open(fname, ‘w’, encoding=‘utf-8’) as f1:#打开文件
f1.write(str1)#将Text组件中全部内容写入文件
root.title(os.path.basename(fname))
f1.close()
def f_about(self):#定义事件处理程序:Help-About
tk.messagebox.showinfo(‘关于’,‘版本V 1.0.1’)
def f_cut(self):#定义事件处理程序
try:
str1=self.textEdit.get(tk.SEL_FIRST,tk.SEL_LAST)#获取选择的内容
self.textEdit.clipboard_clear()#清空剪贴板
self.textEdit.clipboard_append(str1)#附加到剪贴板
self.textEdit.delete(tk.SEL_FIRST,tk.SEL_LAST)#删除选择的内容
except:pass
def f_delete(self):
try:
self.textEdit.delete(tk.SEL_FIRST,tk.SEL_LAST)#删除选择的内容
except:pass
def f_copy(self):#定义事件处理程序
try:
str1 = self.textEdit.get(tk.SEL_FIRST, tk.SEL_LAST)#获取选择的内容
self.textEdit.clipboard_clear()#清空剪贴板
self.textEdit.clipboard_append(str1)#附加到剪贴板
except:pass
def f_paste(self):#定义事件处理程序
str1=self.textEdit.selection_get(selection=‘CLIPBOARD’)#获取剪贴板内容
try:#使用剪贴板内容替换所选内容,否则插入剪贴板内容
self.textEdit.replace(tk.SEL_FIRST,tk.SEL_LAST,str1)
except:
self.textEdit.insert(tk.INSERT,str1)#插入内容到当前位置
def f_popup(self,event):#事件处理函数
self.menuedit.post(event.x_root,event.y_root)#在鼠标右键位置显示菜单
def f_exit(self):
root.destroy()
def f_Loc(self, event):
s = str(self.textEdit.index(‘insert’)).split(’.’)
text = 'Ln: ’ + str(s[0]) + ’ Col: ’ + str(s[1])
self.loc.set(text)
def createToolbar(self):
self.toolbar=tk.Frame(root,bg=‘white’,width=580,height=30)
shortButton=tk.Button(self.toolbar,text=‘新建’,command=self.f_new,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
shortButton=tk.Button(self.toolbar,text=‘打开’,command=self.f_open,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
shortButton=tk.Button(self.toolbar,text=‘保存’,command=self.f_save,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
shortButton=tk.Button(self.toolbar,text=‘剪切’,command=self.f_cut,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
shortButton=tk.Button(self.toolbar,text=‘复制’,command=self.f_copy,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
shortButton=tk.Button(self.toolbar,text=‘粘贴’,command=self.f_paste,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
shortButton=tk.Button(self.toolbar,text=‘删除’,command=self.f_delete,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
shortButton=tk.Button(self.toolbar,text=‘退出’,command=self.f_exit,bg=‘white’)
shortButton.pack(side=tk.LEFT,expand=tk.YES,pady=2)
self.toolbar.propagate(0)
self.toolbar.grid(row=0,column=0,rowspan=6,sticky=tk.NW)
root = tk.Tk()#参加一个Tk根窗口组件root
root.title(“untitle”)
app = Application(master=root)#创建Application的对象实例
app.mainloop()#调用组件的mainloop方法,进入事件循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值