Advertisement
teslariu

editor basico

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