Hacer Bloc de notas usando Tkinter

Veamos cómo crear un bloc de notas simple en Python usando Tkinter. Esta GUI de bloc de notas consistirá en varios menús como archivo y edición, mediante los cuales se pueden realizar todas las funcionalidades como guardar el archivo, abrir un archivo, editar, cortar y pegar.

Ahora, para crear este bloc de notas, Python 3 y Tkinter ya deberían estar instalados en su sistema. Puede descargar el paquete de python adecuado según los requisitos del sistema. Después de haber instalado python con éxito, debe instalar Tkinter (un paquete GUI de Python).

Use este comando para instalar Tkinter: 

pip install python-tk

Importando Tkinter:

Python

import tkinter
import os
from tkinter import *
 
# To get the space above for message
from tkinter.messagebox import *
 
# To get the dialog box to open when required
from tkinter.filedialog import *

Nota: el cuadro de mensaje se usa para escribir el mensaje en el cuadro blanco llamado bloc de notas y el cuadro de diálogo de archivo se usa para que aparezca el cuadro de diálogo cuando está abriendo un archivo desde cualquier lugar de su sistema o guardando su archivo en una posición o lugar en particular. 
  
Añadir menú:

Python

# Add controls(widget)
 
self.__thisTextArea.grid(sticky = N + E + S + W)
 
# To open new file
self.__thisFileMenu.add_command(label = "New",
                                command = self.__newFile)
 
# To open a already existing file
self.__thisFileMenu.add_command(label = "Open",
                                command = self.__openFile)
 
# To save current file
self.__thisFileMenu.add_command(label = "Save",
                                command = self.__saveFile)
 
# To create a line in the dialog
self.__thisFileMenu.add_separator()
 
# To terminate
self.__thisFileMenu.add_command(label = "Exit",
                                command = self.__quitApplication)
self.__thisMenuBar.add_cascade(label = "File",
                               menu = self.__thisFileMenu)
 
# To give a feature of cut
self.__thisEditMenu.add_command(label = "Cut",
                                command = self.__cut)
 
# To give a feature of copy
self.__thisEditMenu.add_command(label = "Copy",
                                command = self.__copy)
 
# To give a feature of paste
self.__thisEditMenu.add_command(label = "Paste",
                                command = self.__paste)
 
# To give a feature of editing
self.__thisMenuBar.add_cascade(label = "Edit",
                               menu = self.__thisEditMenu)
 
# To create a feature of description of the notepad
self.__thisHelpMenu.add_command(label = "About Notepad",
                                command = self.__showAbout)
self.__thisMenuBar.add_cascade(label = "Help",
                               menu = self.__thisHelpMenu)
 
self.__root.config(menu = self.__thisMenuBar)
 
self.__thisScrollBar.pack(side = RIGHT, fill = Y)
 
# Scrollbar will adjust automatically
# according to the content
self.__thisScrollBar.config(command = self.__thisTextArea.yview)
self.__thisTextArea.config(yscrollcommand = self.__thisScrollBar.set)

Con este código, agregaremos el menú en las ventanas de nuestro bloc de notas y le agregaremos cosas como copiar, pegar, guardar, etc. 
  
Agregar la funcionalidad:

Python

def __quitApplication(self):
    self.__root.destroy()
    # exit()
 
def __showAbout(self):
    showinfo("Notepad", "Mrinal Verma")
 
def __openFile(self):
         
    self.__file = askopenfilename(defaultextension=".txt",
                                  filetypes=[("All Files","*.*"),
                                      ("Text Documents","*.txt")])
 
    if self.__file == "":
 
        # no file to open
        self.__file = None
    else:
        # try to open the file
        # set the window title
        self.__root.title(os.path.basename(self.__file) + " - Notepad")
        self.__thisTextArea.delete(1.0,END)
 
        file = open(self.__file,"r")
 
        self.__thisTextArea.insert(1.0,file.read())
 
        file.close()
 
         
def __newFile(self):
    self.__root.title("Untitled - Notepad")
    self.__file = None
    self.__thisTextArea.delete(1.0,END)
 
def __saveFile(self):
 
    if self.__file == None:
        #save as new file
        self.__file = asksaveasfilename(initialfile='Untitled.txt',
                                        defaultextension=".txt",
                                        filetypes=[("All Files","*.*"),
                                            ("Text Documents","*.txt")])
 
        if self.__file == "":
            self.__file = None
        else:
             
            # try to save the file
            file = open(self.__file,"w")
            file.write(self.__thisTextArea.get(1.0,END))
            file.close()
            # change the window title
            self.__root.title(os.path.basename(self.__file) + " - Notepad")
                 
             
    else:
        file = open(self.__file,"w")
        file.write(self.__thisTextArea.get(1.0,END))
        file.close()
 
def __cut(self):
    self.__thisTextArea.event_generate("<<Cut>>")
 
def __copy(self):
    self.__thisTextArea.event_generate("<<Copy>>")
 
def __paste(self):
    self.__thisTextArea.event_generate("<<Paste>>")

En esto, hemos agregado toda la funcionalidad que se requiere en el bloc de notas, también puede agregar otra funcionalidad como el tamaño de fuente, el color de fuente, negrita, subrayado, etc. 

Código principal después de fusionar todo:

Python

import tkinter
import os   
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *
 
class Notepad:
 
    __root = Tk()
 
    # default window width and height
    __thisWidth = 300
    __thisHeight = 300
    __thisTextArea = Text(__root)
    __thisMenuBar = Menu(__root)
    __thisFileMenu = Menu(__thisMenuBar, tearoff=0)
    __thisEditMenu = Menu(__thisMenuBar, tearoff=0)
    __thisHelpMenu = Menu(__thisMenuBar, tearoff=0)
     
    # To add scrollbar
    __thisScrollBar = Scrollbar(__thisTextArea)    
    __file = None
 
    def __init__(self,**kwargs):
 
        # Set icon
        try:
                self.__root.wm_iconbitmap("Notepad.ico")
        except:
                pass
 
        # Set window size (the default is 300x300)
 
        try:
            self.__thisWidth = kwargs['width']
        except KeyError:
            pass
 
        try:
            self.__thisHeight = kwargs['height']
        except KeyError:
            pass
 
        # Set the window text
        self.__root.title("Untitled - Notepad")
 
        # Center the window
        screenWidth = self.__root.winfo_screenwidth()
        screenHeight = self.__root.winfo_screenheight()
     
        # For left-align
        left = (screenWidth / 2) - (self.__thisWidth / 2)
         
        # For right-align
        top = (screenHeight / 2) - (self.__thisHeight /2)
         
        # For top and bottom
        self.__root.geometry('%dx%d+%d+%d' % (self.__thisWidth,
                                              self.__thisHeight,
                                              left, top))
 
        # To make the textarea auto resizable
        self.__root.grid_rowconfigure(0, weight=1)
        self.__root.grid_columnconfigure(0, weight=1)
 
        # Add controls (widget)
        self.__thisTextArea.grid(sticky = N + E + S + W)
         
        # To open new file
        self.__thisFileMenu.add_command(label="New",
                                        command=self.__newFile)   
         
        # To open a already existing file
        self.__thisFileMenu.add_command(label="Open",
                                        command=self.__openFile)
         
        # To save current file
        self.__thisFileMenu.add_command(label="Save",
                                        command=self.__saveFile)   
 
        # To create a line in the dialog       
        self.__thisFileMenu.add_separator()                                        
        self.__thisFileMenu.add_command(label="Exit",
                                        command=self.__quitApplication)
        self.__thisMenuBar.add_cascade(label="File",
                                       menu=self.__thisFileMenu)    
         
        # To give a feature of cut
        self.__thisEditMenu.add_command(label="Cut",
                                        command=self.__cut)            
     
        # to give a feature of copy   
        self.__thisEditMenu.add_command(label="Copy",
                                        command=self.__copy)        
         
        # To give a feature of paste
        self.__thisEditMenu.add_command(label="Paste",
                                        command=self.__paste)        
         
        # To give a feature of editing
        self.__thisMenuBar.add_cascade(label="Edit",
                                       menu=self.__thisEditMenu)    
         
        # To create a feature of description of the notepad
        self.__thisHelpMenu.add_command(label="About Notepad",
                                        command=self.__showAbout)
        self.__thisMenuBar.add_cascade(label="Help",
                                       menu=self.__thisHelpMenu)
 
        self.__root.config(menu=self.__thisMenuBar)
 
        self.__thisScrollBar.pack(side=RIGHT,fill=Y)                   
         
        # Scrollbar will adjust automatically according to the content       
        self.__thisScrollBar.config(command=self.__thisTextArea.yview)    
        self.__thisTextArea.config(yscrollcommand=self.__thisScrollBar.set)
     
         
    def __quitApplication(self):
        self.__root.destroy()
        # exit()
 
    def __showAbout(self):
        showinfo("Notepad","Mrinal Verma")
 
    def __openFile(self):
         
        self.__file = askopenfilename(defaultextension=".txt",
                                      filetypes=[("All Files","*.*"),
                                        ("Text Documents","*.txt")])
 
        if self.__file == "":
             
            # no file to open
            self.__file = None
        else:
             
            # Try to open the file
            # set the window title
            self.__root.title(os.path.basename(self.__file) + " - Notepad")
            self.__thisTextArea.delete(1.0,END)
 
            file = open(self.__file,"r")
 
            self.__thisTextArea.insert(1.0,file.read())
 
            file.close()
 
         
    def __newFile(self):
        self.__root.title("Untitled - Notepad")
        self.__file = None
        self.__thisTextArea.delete(1.0,END)
 
    def __saveFile(self):
 
        if self.__file == None:
            # Save as new file
            self.__file = asksaveasfilename(initialfile='Untitled.txt',
                                            defaultextension=".txt",
                                            filetypes=[("All Files","*.*"),
                                                ("Text Documents","*.txt")])
 
            if self.__file == "":
                self.__file = None
            else:
                 
                # Try to save the file
                file = open(self.__file,"w")
                file.write(self.__thisTextArea.get(1.0,END))
                file.close()
                 
                # Change the window title
                self.__root.title(os.path.basename(self.__file) + " - Notepad")
                 
             
        else:
            file = open(self.__file,"w")
            file.write(self.__thisTextArea.get(1.0,END))
            file.close()
 
    def __cut(self):
        self.__thisTextArea.event_generate("<<Cut>>")
 
    def __copy(self):
        self.__thisTextArea.event_generate("<<Copy>>")
 
    def __paste(self):
        self.__thisTextArea.event_generate("<<Paste>>")
 
    def run(self):
 
        # Run main application
        self.__root.mainloop()
 
 
 
 
# Run main application
notepad = Notepad(width=600,height=400)
notepad.run()

Para ejecutar este código, guárdelo con la extensión .py y luego abra cmd (símbolo del sistema) y muévase a la ubicación del archivo guardado y luego escriba lo siguiente 

python "filename".py 

y presione enter y se ejecutará. O se puede ejecutar directamente simplemente haciendo doble clic en su archivo de extensión .py .
 

Publicación traducida automáticamente

Artículo escrito por MrinalVerma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *