Advertisement
teslariu

editor ACME

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