用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()

__EOF__

本文作者艾孜尔江
本文链接https://www.cnblogs.com/ezhar/p/13907473.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   艾孜尔江  阅读(679)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示