课题内容: 设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作, 如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组 或字符指针实现字符串操作的功能。 插入: 字符、位置。 课题要求: (1)编辑文本; (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。 据此写一段Python代码,用GUI模块Tkinter
时间: 2025-04-03 17:02:40 浏览: 27
下面是一个基于 Python 的 Tkinter GUI 模块实现的简单文本编辑器代码示例。该程序可以满足插入、删除、查找和替换等基本功能,并支持保存和打开文件。
```python
import tkinter as tk
from tkinter import filedialog, messagebox
class TextEditor:
def __init__(self, root):
self.root = root
self.root.title("简易文本编辑器")
# 创建菜单栏
menubar = tk.Menu(self.root)
self.root.config(menu=menubar)
# 文件菜单
file_menu = tk.Menu(menubar, tearoff=False)
menubar.add_cascade(label="文件", menu=file_menu)
file_menu.add_command(label="新建", command=self.new_file)
file_menu.add_command(label="打开...", command=self.open_file)
file_menu.add_command(label="保存", command=self.save_file)
file_menu.add_separator()
file_menu.add_command(label="退出", command=self.exit_editor)
# 编辑菜单
edit_menu = tk.Menu(menubar, tearoff=False)
menubar.add_cascade(label="编辑", menu=edit_menu)
edit_menu.add_command(label="查找", command=self.find_text)
edit_menu.add_command(label="替换", command=self.replace_text)
# 文本框
self.text_area = tk.Text(root, wrap=tk.WORD, undo=True)
self.text_area.pack(fill=tk.BOTH, expand=True)
# 状态栏
self.status_bar = tk.Label(root, text="状态栏", anchor=tk.W)
self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
# 当前打开的文件名
self.file_name = None
# 新建文件
def new_file(self):
self.text_area.delete(1.0, tk.END)
self.file_name = None
self.update_status()
# 打开文件
def open_file(self):
path = filedialog.askopenfilename(defaultextension=".txt",
filetypes=[("所有文件", "*.*"), ("文本文件", "*.txt")])
if path:
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
self.text_area.delete(1.0, tk.END)
self.text_area.insert(tk.END, content)
self.file_name = path
self.update_status()
# 保存文件
def save_file(self):
if not self.file_name:
self.file_name = filedialog.asksaveasfilename(initialfile='未命名.txt',
defaultextension='.txt',
filetypes=[('All Files', '*.*'), ('Text Documents', '*.txt')])
if self.file_name:
try:
with open(self.file_name, "w", encoding="utf-8") as f:
f.write(self.text_area.get(1.0, tk.END))
self.update_status(f"已保存 - {self.file_name}")
except Exception as e:
messagebox.showerror("错误", str(e))
# 查找文字
def find_text(self):
search_str = tk.simpledialog.askstring("查找", "请输入要查找的内容:")
if search_str:
start_pos = self.text_area.search(search_str, 1.0, stopindex=tk.END)
while start_pos:
end_pos = f"{start_pos}+{len(search_str)}c"
self.text_area.tag_add("match", start_pos, end_pos)
self.text_area.tag_config("match", background="yellow", foreground="black")
start_pos = self.text_area.search(search_str, end_pos, stopindex=tk.END)
# 替换文字
def replace_text(self):
old_string = tk.simpledialog.askstring("替换", "请输入需要替换的文字:")
new_string = tk.simpledialog.askstring("替换", f"将 '{old_string}' 替换为?")
if old_string and new_string:
all_content = self.text_area.get(1.0, tk.END)
updated_content = all_content.replace(old_string, new_string)
self.text_area.delete(1.0, tk.END)
self.text_area.insert(tk.END, updated_content)
# 更新状态栏
def update_status(self, status=None):
if not status:
if self.file_name:
status = f"当前文件: {self.file_name}"
else:
status = "无标题文档"
self.status_bar.config(text=status)
# 关闭窗口提示
def exit_editor(self):
should_exit = True
if self.is_modified():
result = messagebox.askyesnocancel("警告", "有尚未保存的工作,是否继续关闭?")
if result is None:
return
elif result == False:
should_exit = False
if should_exit:
self.root.destroy()
# 判断是否有修改内容
def is_modified(self):
current_content = self.text_area.get(1.0, tk.END).strip()
if self.file_name:
with open(self.file_name, 'r', encoding='utf-8') as f:
original_content = f.read().strip()
return current_content != original_content
return bool(current_content)
if __name__ == "__main__":
app = tk.Tk()
editor = TextEditor(app)
app.mainloop()
```
### 功能说明:
1. **文件操作**:实现了“新建”、“打开”和“保存”文件的基本功能。
2. **编辑操作**:提供查找特定字符串并高亮显示的功能;还允许用户一次性替换某段文字的所有匹配项。
3. **界面交互**:通过 Tkinter 提供直观友好的图形化界面,方便进行文本处理任务。
4. **退出检查**:当检测到未保存更改时会弹出确认对话框提醒用户。
---
阅读全文
相关推荐
















