Python实例1:文本编辑器 您所在的位置:网站首页 webgl文本编辑 Python实例1:文本编辑器

Python实例1:文本编辑器

2023-03-22 23:39| 来源: 网络整理| 查看: 265

import tkinter as tk from tkinter import filedialog, ttk from PIL import Image, ImageTk import os import docx2txt import pptx import pdfplumber class WordLikeApp: def __init__(self, master): self.master = master master.title("WordLikeApp") # 创建一个 style 对象以使用 ttk 主题 self.style = ttk.Style() self.style.theme_use("vista") # 创建一个 paned window 控件,分为左右两个部分 self.paned_window = ttk.PanedWindow(master, orient="horizontal") self.paned_window.pack(expand=True, fill="both") # 左侧:文本编辑器 self.textarea_frame = ttk.Frame(self.paned_window) self.textarea = tk.Text(self.textarea_frame) self.textarea.pack(expand=True, fill="both") self.paned_window.add(self.textarea_frame) # 右侧:文件预览、工具栏和状态栏 self.preview_toolbar_status_frame = ttk.Frame(self.paned_window) self.paned_window.add(self.preview_toolbar_status_frame) # 右上角:文件预览 self.tab_control = ttk.Notebook(self.preview_toolbar_status_frame) self.tab_control.pack(expand=True, fill="both", padx=5, pady=5) self.file_preview_frame = ttk.Frame(self.tab_control) self.file_preview_textarea = tk.Text(self.file_preview_frame) self.file_preview_textarea.pack(expand=True, fill="both") self.tab_control.add(self.file_preview_frame, text="File Preview") # 右中间:工具栏 self.toolbar = ttk.Frame(self.preview_toolbar_status_frame) self.toolbar.pack(side="top", fill="x", padx=5, pady=5) new_icon = tk.PhotoImage(file="icons/new.png") open_icon = tk.PhotoImage(file="icons/open.png") save_icon = tk.PhotoImage(file="icons/save.png") self.new_button = ttk.Button(self.toolbar, image=new_icon, command=self.new_file) self.new_button.image = new_icon self.new_button.pack(side="left") self.open_button = ttk.Button(self.toolbar, image=open_icon, command=self.open_file) self.open_button.image = open_icon self.open_button.pack(side="left") self.save_button = ttk.Button(self.toolbar, image=save_icon, command=self.save_file) self.save_button.image = save_icon self.save_button.pack(side="left") # 右下角:状态栏 self.statusbar = ttk.Label(self.preview_toolbar_status_frame, text="Ready", anchor="w") self.statusbar.pack(side="bottom", fill="x") # 菜单栏 self.menubar = tk.Menu(master) master.config(menu=self.menubar) self.filemenu = tk.Menu(self.menubar, tearoff=0) self.filemenu.add_command(label="New", command=self.new_file, accelerator="Ctrl+N") self.filemenu.add_command(label="Open", command=self.open_file, accelerator="Ctrl+O") self.filemenu.add_command(label="Save", command=self.save_file, accelerator="Ctrl+S") self.filemenu.add_separator() self.filemenu.add_command(label="Exit", command=master.quit) self.menubar.add_cascade(label="File", menu=self.filemenu) # 绑定快捷键 master.bind("", lambda e: self.new_file()) master.bind("", lambda e: self.open_file()) master.bind("", lambda e: self.save_file()) def new_file(self): self.textarea.delete("1.0", "end") self.update_file_preview() self.update_statusbar("New file created.") def open_file(self): filename = filedialog.askopenfilename() if filename: _, extension = os.path.splitext(filename) extension = extension.lower() if extension == ".txt": with open(filename, "r") as f: file_content = f.read() self.textarea.delete("1.0", "end") self.textarea.insert("1.0", file_content) self.update_file_preview() self.update_statusbar(f"File opened: {filename}.") elif extension in [".jpg", ".jpeg", ".png", ".gif", ".bmp"]: img = Image.open(filename) img.thumbnail((300, 300)) photo = ImageTk.PhotoImage(img) label = tk.Label(self.file_preview_frame, image=photo) label.image = photo label.pack(expand=True, fill="both") self.tab_control.select(self.tab_control.tabs()[0]) self.update_statusbar(f"Image opened: {filename}.") elif extension == ".docx": file_content = docx2txt.process(filename) self.textarea.delete("1.0", "end") self.textarea.insert("1.0", file_content) self.update_file_preview() self.update_statusbar(f"File opened: {filename}.") elif extension == ".pptx": ppt = pptx.Presentation(filename) text_runs = [] for slide in ppt.slides: for shape in slide.shapes: if hasattr(shape, "text"): text_runs.append(shape.text) file_content = "\n".join(text_runs) self.textarea.delete("1.0", "end") self.textarea.insert("1.0", file_content) self.update_file_preview() self.update_statusbar(f"File opened: {filename}.") elif extension == ".pdf": with pdfplumber.open(filename) as pdf: pages = pdf.pages text_runs = [] for page in pages: text = page.extract_text() text_runs.append(text) file_content = "\n".join(text_runs) self.textarea.delete("1.0", "end") self.textarea.insert("1.0", file_content) self.update_file_preview() self.update_statusbar(f"File opened: {filename}.") else: self.update_statusbar(f"Unsupported file format: {extension}.") def save_file(self): filename = filedialog.asksaveasfilename() if filename: with open(filename, "w") as f: f.write(self.textarea.get("1.0", "end")) self.update_statusbar(f"File saved: {filename}.") def update_file_preview(self): file_content = self.textarea.get("1.0", "end") self.file_preview_textarea.delete("1.0", "end") self.file_preview_textarea.insert("1.0", file_content) def update_statusbar(self, status): self.statusbar.config(text=status) root = tk.Tk() app = WordLikeApp(root) root.mainloop()

在这个版本的代码中,我们添加了对图片、Word文档、PowerPoint演示文稿和PDF文件的支持。当用户打开文件时,程序首先检查文件扩展名,根据扩展名确定如何处理该文件。

当用户打开图片时,程序会将其缩放为小图像,并使用`Label`控件将其显示在文件预览选项卡中。

当用户打开.docx和.pptx文件时,程序使用`docx2txt`和`pptx`库从文本中提取文本内容,并在文本编辑器和文件预览中显示它。当用户打开.pdf文件时,程序使用`pdfplumber`库从PDF中提取文本内容。

当用户试图打开不受支持的文件格式时,程序将在状态栏中显示一条消息,指出文件格式不受支持。

总之,我们添加了更多的功能,并实现了对各种文件格式的支持,以使WordLikeApp功能更加完善。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有