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()
用python制作文本编辑器
最新推荐文章于 2024-03-09 10:57:39 发布