鱼C论坛

 找回密码
 立即注册
查看: 23|回复: 1

[作品展示] txt阅读编辑器

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python3做的txt阅读编辑器:代码来了。
  1. #读取txt.py
  2. import tkinter as tk
  3. from tkinter import filedialog, messagebox
  4. from tkinter.font import Font


  5. class TxtViewer:
  6.     def __init__(self, root):
  7.         self.root = root
  8.         self.root.title("TXT文本查看编辑器")
  9.         self.root.geometry("800x600")
  10.         
  11.         # 当前打开文件路径
  12.         self.current_file = None
  13.         # 初始化默认字体字号
  14.         self.default_size = 12
  15.         self.default_family = "微软雅黑"
  16.         
  17.         # 创建顶部菜单栏
  18.         self.menu_bar = tk.Menu(self.root)
  19.         
  20.         # 1. 文件菜单
  21.         self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
  22.         self.file_menu.add_command(label="打开文件", command=self.open_file)
  23.         self.file_menu.add_command(label="保存文件", command=self.save_file)
  24.         self.file_menu.add_separator()
  25.         self.file_menu.add_command(label="退出", command=self.root.quit)
  26.         self.menu_bar.add_cascade(label="文件", menu=self.file_menu)
  27.         
  28.         # 2. 字号调整菜单
  29.         self.size_menu = tk.Menu(self.menu_bar, tearoff=0)
  30.         # 添加常用字号选项
  31.         for size in [8, 10, 12, 14, 16, 18, 20, 24, 28]:
  32.             self.size_menu.add_command(label=f"{size}号", command=lambda s=size: self.change_size(s))
  33.         self.menu_bar.add_cascade(label="字号", menu=self.size_menu)
  34.         
  35.         # 3. 字体调整菜单
  36.         self.font_menu = tk.Menu(self.menu_bar, tearoff=0)
  37.         # 添加常用中文字体
  38.         for family in ["微软雅黑", "宋体", "黑体", "楷体", "Arial", "Times New Roman", "Courier New"]:
  39.             self.font_menu.add_command(label=family, command=lambda f=family: self.change_family(f))
  40.         self.menu_bar.add_cascade(label="字体", menu=self.font_menu)
  41.         
  42.         # 绑定菜单栏到主窗口
  43.         self.root.config(menu=self.menu_bar)
  44.         
  45.         # 创建可编辑文本区域,开启自动换行
  46.         self.text_font = Font(family=self.default_family, size=self.default_size)
  47.         self.text_area = tk.Text(
  48.             self.root,
  49.             wrap=tk.WORD,
  50.             font=self.text_font,
  51.             padx=10,
  52.             pady=10
  53.         )
  54.         self.text_area.pack(fill=tk.BOTH, expand=True)
  55.         
  56.         # 添加滚动条
  57.         self.scroll_bar = tk.Scrollbar(self.text_area, command=self.text_area.yview)
  58.         self.text_area.config(yscrollcommand=self.scroll_bar.set)
  59.         self.scroll_bar.pack(side=tk.RIGHT, fill=tk.Y)

  60.     def open_file(self):
  61.         """打开选中的TXT文件"""
  62.         file_path = filedialog.askopenfilename(
  63.             title="选择要打开的TXT文件",
  64.             filetypes=[("文本文档(*.txt)", "*.txt"), ("所有文件", "*.*")]
  65.         )
  66.         if not file_path:
  67.             return
  68.         
  69.         file = None
  70.         try:
  71.             file = open(file_path, "r", encoding="utf-8")
  72.             content = file.read()
  73.             # 清空原有内容,插入新读取的内容
  74.             self.text_area.delete(1.0, tk.END)
  75.             self.text_area.insert(tk.END, content)
  76.             # 更新状态
  77.             self.current_file = file_path
  78.             self.root.title(f"TXT查看器 - {file_path.split('/')[-1]}")
  79.         except Exception as e:
  80.             messagebox.showerror("打开错误", f"打开文件失败: {str(e)}")
  81.             if file:
  82.                 file.close()
  83.             self.current_file = None
  84.         finally:
  85.             # 保证异常时文件一定会被关闭
  86.             if file and not file.closed:
  87.                 file.close()

  88.     def save_file(self):
  89.         """通过另存为保存文件"""
  90.         save_path = filedialog.asksaveasfilename(
  91.             title="保存文件",
  92.             defaultextension=".txt",
  93.             filetypes=[("文本文档(*.txt)", "*.txt"), ("所有文件", "*.*")]
  94.         )
  95.         if not save_path:
  96.             return
  97.         
  98.         file = None
  99.         try:
  100.             content = self.text_area.get(1.0, tk.END)
  101.             file = open(save_path, "w", encoding="utf-8")
  102.             file.write(content)
  103.             self.current_file = save_path
  104.             self.root.title(f"TXT查看器 - {save_path.split('/')[-1]}")
  105.             messagebox.showinfo("保存成功", f"文件已成功保存到:\n{save_path}")
  106.         except Exception as e:
  107.             messagebox.showerror("保存错误", f"保存文件失败: {str(e)}")
  108.             if file:
  109.                 file.close()
  110.         finally:
  111.             if file and not file.closed:
  112.                 file.close()

  113.     def change_size(self, new_size):
  114.         """修改文本字号"""
  115.         self.text_font.configure(size=new_size)

  116.     def change_family(self, new_family):
  117.         """修改文本字体"""
  118.         self.text_font.configure(family=new_family)


  119. if __name__ == "__main__":
  120.     root = tk.Tk()
  121.     app = TxtViewer(root)
  122.     root.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层
您的代码存在几个语法错误和逻辑问题,以下是修正建议:

主要问题
  • 第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 以兼容不同操作系统的路径分隔符。


修正后的主要代码片段

  1. import os
  2. ...
  3. # 字号列表
  4. for size in [8, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36]:
  5.     self.size_menu.add_command(label=f"{size}号", command=lambda s=size: self.change_size(s))
  6. # 字体列表
  7. for family in ["微软雅黑", "宋体", "黑体", "楷体", "仿宋", "Arial", "Times New Roman"]:
  8.     self.font_menu.add_command(label=family, command=lambda f=family: self.change_family(f))
  9. ...
  10. # 打开文件
  11. filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
  12. file_path = filedialog.askopenfilename(title="选择要打开的TXT文件", filetypes=filetypes)
  13. ...
  14. # 设置窗口标题
  15. self.root.title(f"TXT查看器 - {os.path.basename(file_path)}")
  16. ...
  17. # 保存文件
  18. save_path = filedialog.asksaveasfilename(title="保存文件", defaultextension=".txt", filetypes=filetypes)
  19. ...
  20. self.root.title(f"TXT查看器 - {os.path.basename(save_path)}")
复制代码


此外,您还可以考虑:
  • 增加“另存为”功能与“保存”区分,当前“保存”实际是另存为。
  • 统一窗口标题初始为 "TXT文本查看编辑器" 或修改后的名称。
  • 处理字体列表中中文字体在非中文系统上可能失效的问题,可添加 try/except 或使用系统通用字体。


修改后代码即可正常运行。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-7-1 10:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表