Python实例1:文本编辑器 | 您所在的位置:网站首页 › webgl文本编辑 › Python实例1:文本编辑器 |
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 实验室设备网 版权所有 |