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