txt阅读编辑器
Python3做的txt阅读编辑器:代码来了。#读取txt.pyimport tkinter as tk
from tkinter import filedialog, messagebox
from tkinter.font import Font
class TxtViewer:
def __init__(self, root):
self.root = root
self.root.title("TXT文本查看编辑器")
self.root.geometry("800x600")
# 当前打开文件路径
self.current_file = None
# 初始化默认字体字号
self.default_size = 12
self.default_family = "微软雅黑"
# 创建顶部菜单栏
self.menu_bar = tk.Menu(self.root)
# 1. 文件菜单
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="打开文件", command=self.open_file)
self.file_menu.add_command(label="保存文件", command=self.save_file)
self.file_menu.add_separator()
self.file_menu.add_command(label="退出", command=self.root.quit)
self.menu_bar.add_cascade(label="文件", menu=self.file_menu)
# 2. 字号调整菜单
self.size_menu = tk.Menu(self.menu_bar, tearoff=0)
# 添加常用字号选项
for size in :
self.size_menu.add_command(label=f"{size}号", command=lambda s=size: self.change_size(s))
self.menu_bar.add_cascade(label="字号", menu=self.size_menu)
# 3. 字体调整菜单
self.font_menu = tk.Menu(self.menu_bar, tearoff=0)
# 添加常用中文字体
for family in ["微软雅黑", "宋体", "黑体", "楷体", "Arial", "Times New Roman", "Courier New"]:
self.font_menu.add_command(label=family, command=lambda f=family: self.change_family(f))
self.menu_bar.add_cascade(label="字体", menu=self.font_menu)
# 绑定菜单栏到主窗口
self.root.config(menu=self.menu_bar)
# 创建可编辑文本区域,开启自动换行
self.text_font = Font(family=self.default_family, size=self.default_size)
self.text_area = tk.Text(
self.root,
wrap=tk.WORD,
font=self.text_font,
padx=10,
pady=10
)
self.text_area.pack(fill=tk.BOTH, expand=True)
# 添加滚动条
self.scroll_bar = tk.Scrollbar(self.text_area, command=self.text_area.yview)
self.text_area.config(yscrollcommand=self.scroll_bar.set)
self.scroll_bar.pack(side=tk.RIGHT, fill=tk.Y)
def open_file(self):
"""打开选中的TXT文件"""
file_path = filedialog.askopenfilename(
title="选择要打开的TXT文件",
filetypes=[("文本文档(*.txt)", "*.txt"), ("所有文件", "*.*")]
)
if not file_path:
return
file = None
try:
file = open(file_path, "r", encoding="utf-8")
content = file.read()
# 清空原有内容,插入新读取的内容
self.text_area.delete(1.0, tk.END)
self.text_area.insert(tk.END, content)
# 更新状态
self.current_file = file_path
self.root.title(f"TXT查看器 - {file_path.split('/')[-1]}")
except Exception as e:
messagebox.showerror("打开错误", f"打开文件失败: {str(e)}")
if file:
file.close()
self.current_file = None
finally:
# 保证异常时文件一定会被关闭
if file and not file.closed:
file.close()
def save_file(self):
"""通过另存为保存文件"""
save_path = filedialog.asksaveasfilename(
title="保存文件",
defaultextension=".txt",
filetypes=[("文本文档(*.txt)", "*.txt"), ("所有文件", "*.*")]
)
if not save_path:
return
file = None
try:
content = self.text_area.get(1.0, tk.END)
file = open(save_path, "w", encoding="utf-8")
file.write(content)
self.current_file = save_path
self.root.title(f"TXT查看器 - {save_path.split('/')[-1]}")
messagebox.showinfo("保存成功", f"文件已成功保存到:\n{save_path}")
except Exception as e:
messagebox.showerror("保存错误", f"保存文件失败: {str(e)}")
if file:
file.close()
finally:
if file and not file.closed:
file.close()
def change_size(self, new_size):
"""修改文本字号"""
self.text_font.configure(size=new_size)
def change_family(self, new_family):
"""修改文本字体"""
self.text_font.configure(family=new_family)
if __name__ == "__main__":
root = tk.Tk()
app = TxtViewer(root)
root.mainloop() 您的代码存在几个语法错误和逻辑问题,以下是修正建议:
主要问题:
[*]第16行和23行的 for size in : 和 for family in : 缺少可迭代列表,应填充具体字号和字体名称。
[*]第38行和78行的 filetypes= 缺少文件类型元组,应写成 [("文本文件", "*.txt"), ("所有文件", "*.*")]。
[*]第57行和83行使用 file_path.split('/') 返回列表,不能直接用于标题,应取最后一个元素,例如 file_path.split('/')[-1] 或使用 os.path.basename(file_path)。
[*]建议导入 import os 以兼容不同操作系统的路径分隔符。
修正后的主要代码片段:
import os
...
# 字号列表
for size in :
self.size_menu.add_command(label=f"{size}号", command=lambda s=size: self.change_size(s))
# 字体列表
for family in ["微软雅黑", "宋体", "黑体", "楷体", "仿宋", "Arial", "Times New Roman"]:
self.font_menu.add_command(label=family, command=lambda f=family: self.change_family(f))
...
# 打开文件
filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
file_path = filedialog.askopenfilename(title="选择要打开的TXT文件", filetypes=filetypes)
...
# 设置窗口标题
self.root.title(f"TXT查看器 - {os.path.basename(file_path)}")
...
# 保存文件
save_path = filedialog.asksaveasfilename(title="保存文件", defaultextension=".txt", filetypes=filetypes)
...
self.root.title(f"TXT查看器 - {os.path.basename(save_path)}")
此外,您还可以考虑:
[*]增加“另存为”功能与“保存”区分,当前“保存”实际是另存为。
[*]统一窗口标题初始为 "TXT文本查看编辑器" 或修改后的名称。
[*]处理字体列表中中文字体在非中文系统上可能失效的问题,可添加 try/except 或使用系统通用字体。
修改后代码即可正常运行。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]