teslariu

editor de texto ACME

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