Advertisement
teslariu

editor de texto

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