Advertisement
teslariu

editor

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