Advertisement
teslariu

editor ACME

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