用python制作文本编辑器

import tkinter 
import tkinter as tk
from tkinter import *
import tkinter.filedialog
import tkinter.messagebox
import tkinter.scrolledtext
import tkinter.colorchooser
import tkinter.simpledialog



#----------------------------------------一、创建窗口-------------------------------------------------
filename=""  #定义空文件名
win=tk.Tk()
win["height"]=400
win["width"]=600
#-----------------------------------------------------------------------------------------------------



#---------------------------------------二、功能定义区---------------------------------------------

#-----------------------------------------1.菜单栏 File-----------------------------------------------------------

textChanged=tk.IntVar(value=0)  #字符串计数器

#1.打开
def Open():
    global filename
    #1.获取字符,是否保存原来的文档
    if textChanged.get():
        yesno=tk.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")]) #打开路径框
    
    #2.打开新的文档
    if filename:
        txtContent.delete(0.0,tk.END)  #删除原来的文本
        fp=open(filename,"rb")         #读取文本
        txtContent.insert(tkinter.INSERT,"".join(fp.read().decode('GBK'))) #解码插入到文本编辑器
        fp.close()     #关闭指针
        textChanged.set(0)  #字符串置0
 
#2.保存
def Save():
    global filename
    if not filename:
        SaveAs()
    
    elif textChanged.get():
        fp=open(filename,"w")   #创建文本
        fp.write(txtContent.get(0.0,tkinter.END))#将文本框的内容导入文件
        fp.close()   #关闭
        textChanged.set(0) #计数器置0

#3.保存到        
def SaveAs():
    global filename
    #创建对话框,默认对应的路径和文件名
    newfilename=tkinter.filedialog.asksaveasfilename(title="Save As",initialdir=r"c:\\",initialfile="new.txt")
    
    #写入文件内容
    if newfilename:
        fp=open(newfilename,"w") 
        fp.write(txtContent.get(0.0,tkinter.END))
        fp.close()
        filename=newfilename

        textChanged.set(0)

#4.关闭
def Close():
    global filename
    Save()   #保存
    txtContent.delete(0.0,tkinter.END) #区域置空
    filename=""  #文件名置空
  

    
#-------------------------------------------2.菜单栏 Edit-----------------------------------------------------------
#1.回退
def Undo():
    txtContent["undo"]=True    
    try:
        txtContent.edit_undo() 
    except Exception as e:
        pass

#2.前进
def Redo():
    txtContent["undo"]=True
    try:
        txtContent.edit_redo()
    except Exception as e:
        pass

#3.复制
def Copy():
    txtContent.clipboard_clear()  #清空缓冲区
    txtContent.clipboard_append(txtContent.selection_get())  #保存到缓冲区
    pass

#4.剪切
def Cut():
    Copy()  #复制文本
    txtContent.delete(tkinter.SEL_FIRST,tkinter.SEL_LAST)  #删除文本编译器的选中文本

#5.粘贴
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
    
#6.查找    
def Search():
    textToSearch=tkinter.simpledialog.askstring(title="Search",prompt="What to search?")  
    start=txtContent.search(textToSearch,0.0,tkinter.END)             
    if start:   #查找到时,返回yes
        tkinter.messagebox.showinfo(title="Found",message="ok")
          

#--------------------------------------------3.菜单栏 Help-----------------------------------------------------------
#1,关于
def About():
    tkinter.messagebox.showinfo(title="About",message="Author:Dong Fuguo")  #弹出信息框
    pass




#-------------------------------------------------------------------------------------------------------------------   






#------------------------------------三、菜单栏框架----------------------------------

menu1=tk.Menu(win)

#菜单1 File
#---------------------------------------------------------------------
submenu=tk.Menu(menu1,tearoff=0)

submenu.add_command(label="Open",command=Open)   
submenu.add_separator()                             
submenu.add_command(label="Save",command=Save)  
submenu.add_separator()
submenu.add_command(label="SaveAs",command=SaveAs)
submenu.add_separator()
submenu.add_command(label="Close",command=Close)

menu1.add_cascade(label="File",menu=submenu)
#-----------------------------------------------------------------------


#菜单2  Edit
#-----------------------------------------------------------------------
submenu2=tk.Menu(menu1,tearoff=0)

submenu2.add_command(label="Undo",command=Undo)
submenu2.add_separator()
submenu2.add_command(label="Redo",command=Redo)
submenu2.add_separator()
submenu2.add_command(label="Copy",command=Copy)
submenu2.add_separator()
submenu2.add_command(label="Cut",command=Cut)
submenu2.add_separator()
submenu2.add_command(label="Paste",command=Paste)
submenu2.add_separator()
submenu2.add_command(label="Search",command=Search)

menu1.add_cascade(label="Edit",menu=submenu2)
#------------------------------------------------------------------------


#菜单3 Help
#------------------------------------------------------------------------
submenu3=tk.Menu(menu1,tearoff=0)

submenu3.add_command(label="About",command=About)

menu1.add_cascade(label="Help",menu=submenu3)
#------------------------------------------------------------------------

#----------------------------------------------------------------------------------------------------------




#------------------------------------------四、总体结构---------------------------------
#1.菜单栏
win.config(menu=menu1)

#2.滑动文本框
def keyPress(event):
    textChanged.set(1)

txtContent=tk.scrolledtext.ScrolledText(win,wrap=tk.WORD)
txtContent.pack(fill=tk.BOTH,expand=tkinter.YES)  #创建

txtContent.bind("<Key>",keyPress)#绑定按键识别器

win.mainloop()


  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值