teslariu

editor texto

Sep 5th, 2023
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.57 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Editor de texto
  5.  
  6. from tkinter import *
  7. from tkinter import filedialog as fd
  8. from tkinter import messagebox as mb
  9.  
  10. class Editor():
  11.    
  12.     def __init__(self, root):
  13.         self.root = root
  14.         self.ruta = ""
  15.         #self.icono = PhotoImage(file="icono.png")
  16.         self.mensaje = StringVar()
  17.         self.texto = Text(self.root)
  18.        
  19.         # dimensiones y posicionamiento
  20.         self.root.geometry("600x500")
  21.         self.root.title("Editor ACME")
  22.         self.root.resizable(True, True)
  23.         self.root.minsize(300,300)
  24.         #self.root.iconphoto(True, self.icono)
  25.        
  26.         # creo la barra de menu
  27.         menubar = Menu(self.root)
  28.        
  29.         # creo el menu archivo
  30.         archivo = Menu(menubar, tearoff=0)
  31.         archivo.add_command(label="Nuevo", command=self.nuevo)
  32.         archivo.add_command(label="Abrir", command=self.abrir)
  33.         archivo.add_command(label="Guardar", command=self.guardar)
  34.         archivo.add_command(label="Guardar como", command=self.guardar_como)
  35.         archivo.add_separator()
  36.         archivo.add_command(label="Salir", command=self.root.quit)
  37.         menubar.add_cascade(label="Archivo", menu=archivo)
  38.        
  39.        
  40.         # creo el menu editar
  41.         #redo_image = PhotoImage(file="redo.png")
  42.         editar = Menu(menubar, tearoff=0)
  43.         editar.add_command(label="Deshacer", accelerator="Ctrl+Z", command=self.undo)
  44.         editar.add_command(label="Rehacer", accelerator="Ctrl+Y", command=self.redo)
  45.         #editar.add_command(label="Rehacer", accelerator="Ctrl+Y", compound="left", image=redo_image, command=self.redo)
  46.         editar.add_command(label="Cortar", accelerator="Ctrl+X", command=self.cut)
  47.         editar.add_command(label="Copiar", accelerator="Ctrl+C", command=self.copy)
  48.         editar.add_command(label="Pegar", accelerator="Ctrl+P", command=self.paste)
  49.         menubar.add_cascade(label="Editar", menu=editar)
  50.        
  51.         # añado la barra de menu a la ventana
  52.         self.root.config(menu=menubar)
  53.        
  54.         # scrollbar
  55.         scroll = Scrollbar(self.root)
  56.         scroll.pack(side=RIGHT, fill=Y)
  57.        
  58.         # zona de escritura
  59.         self.texto.pack(fill="both", expand=True)
  60.         self.texto.config(
  61.             padx=6, pady=6, bd=0,
  62.             font=("arial",12),
  63.             bg="beige",
  64.             undo=True,
  65.             maxundo=20,
  66.             yscrollcommand=scroll.set
  67.         )
  68.         scroll.config(command=self.texto.yview)
  69.         # barra de estado inferior
  70.         self.mensaje.set("Bienvenido al Editor ACME")
  71.         barra_inferior = Label(self.root, textvar=self.mensaje, justify="right")
  72.         barra_inferior.pack(side='left')
  73.        
  74.        
  75.     def nuevo(self):
  76.         """Crea un archivo nuevo"""
  77.         if self.texto:
  78.             opcion = mb.askokcancel(title="Advertencia", message="OJO: perderá los cambios no guardados")
  79.         if not opcion:
  80.             return
  81.         self.mensaje.set("Nuevo archivo")
  82.         self.texto.delete(1.0,END)
  83.         self.root.title("Editor ACME")
  84.         self.ruta = ""
  85.        
  86.        
  87.     def abrir(self):
  88.         self.mensaje.set("Abrir archivo")
  89.         self.ruta = fd.askopenfilename(
  90.                         initialdir = ".",
  91.                         filetypes = (
  92.                             ("Archivos de texto","*.txt"),
  93.                             ("Archivos de Python","*.py"),
  94.                             ("Todos los archivos","*.*"),
  95.                         ),
  96.                         title="Abrir archivo"
  97.         )
  98.         if self.ruta:
  99.             f = open(self.ruta)
  100.             contenido = f.read()
  101.             self.texto.delete(1.0, END)
  102.             self.texto.insert('insert', contenido)
  103.             f.close()
  104.             self.root.title(f"{self.ruta} - Editor ACME")
  105.             self.mensaje.set("Archivo abierto")
  106.        
  107.    
  108.     def guardar(self):
  109.         self.mensaje.set("Guardar archivo")
  110.         if self.ruta:
  111.             contenido = self.texto.get(1.0, 'end-1c')
  112.             f = open(self.ruta,"w+")
  113.             f.write(contenido)
  114.             f.close()
  115.             self.mensaje.set("Archivo guardado correctamente")
  116.            
  117.         else:
  118.             self.guardar_como()
  119.        
  120.    
  121.     def guardar_como(self):
  122.         self.mensaje.set("Guardar archivo como")
  123.         f = fd.asksaveasfile(
  124.                         filetypes = (
  125.                             ("Archivos de texto","*.txt"),
  126.                             ("Archivos de Python","*.py"),
  127.                             ("Todos los archivos","*.*"),
  128.                         ),
  129.                         title="Guardar archivo como",
  130.                         mode = "w",
  131.                         defaultextension = ".txt"
  132.             )
  133.         if f:
  134.             self.ruta = f.name
  135.             contenido = self.texto.get(1.0, 'end-1c')
  136.             f = open(self.ruta,"w+")
  137.             f.write(contenido)
  138.             f.close()
  139.             self.mensaje.set("Archivo guardado correctamente")
  140.             self.root.title(f"{self.ruta} - Editor ACME")
  141.            
  142.         else:
  143.             self.mensaje.set("Se ha cancelado el guardado")
  144.             self.ruta = ""
  145.        
  146.        
  147.     def undo(self):
  148.         self.texto.event_generate("<<Undo>>")
  149.                
  150.     def redo(self):
  151.         self.texto.event_generate("<<Redo>>")
  152.        
  153.     def cut(self):
  154.         self.texto.event_generate("<<Cut>>")
  155.        
  156.     def copy(self):
  157.         self.texto.event_generate("<<Copy>>")
  158.        
  159.     def paste(self):
  160.         self.texto.event_generate("<<Paste>>")
  161.        
  162.        
  163.        
  164.        
  165.        
  166.        
  167. if __name__ == "__main__":
  168.     root = Tk()
  169.     editor = Editor(root)
  170.     root.mainloop()
  171.  
Add Comment
Please, Sign In to add comment