Question

In: Computer Science

Write a GUI-based program that allows the user to open, edit, and save text files. The...

Write a GUI-based program that allows the user to open, edit, and save text files. The GUI should include a labeled entry field for the filename and multi-line text widget for the text of the file. The user should be able to scroll through the text by manipulating a vertical scrollbar. Include command buttons labeled Open, Save, and New that allow the user to open, save and create new files. The New command should then clear the text widget and the entry widget. Python

  • .txt file
  • .py file
  • Psuedocode AND Flowchart (use Word or PowerPoint only)

Solutions

Expert Solution

Importing Tkinter :

filter_none

edit

play_arrow

brightness_4

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 *

Adding Menu :

# 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)

With this code we will add the menu in the windows of our notepad and will add the things like copy, paste, save etc, to it.

Adding The Functionality :

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>>")

In this we have added all the functionality that is required in the notepad, you can add other functionality too in this like the font size, font color, bold, underlined, etc.

Main Code After Merging All :

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-alling

        left = (screenWidth / 2) - (self.__thisWidth / 2)

         

        # For right-allign

        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()

To run this code, save it by the extension .py and then open cmd(command prompt) and move to the location of the file saved and then write the following

python "filename".py 

and press enter and it will run. Or can be run directly by simply double clicking your .py extension file


Related Solutions

Write a program that allows the user to navigate the lines of text in a file....
Write a program that allows the user to navigate the lines of text in a file. The program should prompt the user for a filename and input the lines of text into a list. The program then enters a loop in which it prints the number of lines in the file and prompts the user for a line number. Actual line numbers range from 1 to the number of lines in the file. If the input is 0, the program...
Write a program that allows the user to navigate the lines of text in a file....
Write a program that allows the user to navigate the lines of text in a file. The program should prompt the user for a filename and input the lines of text into a list. The program then enters a loop in which it prints the number of lines in the file and prompts the user for a line number. Actual line numbers range from 1 to the number of lines in the file. If the input is 0, the program...
Edit question Write a program that merges two files as follows. The two files are in...
Edit question Write a program that merges two files as follows. The two files are in the docsharing which you can download it. One file will contain usernames(usernames.txt):foster001smith023nyuyen002...The other file will contain passwords(passwords.txt):x34rdf3ep43e4rddw32eds22...The program should create a third file matching username and passwords(usernamesPasswords.txt):foster001x34rdf3esmith023p43e4rddnyuyen002w32eds22......Give the user of your programs the option of displaying you output file. CAN ANYONE SOLVE THIS IN C
Write a GUI based Python program that will allow the user to perform (i) generate RSA...
Write a GUI based Python program that will allow the user to perform (i) generate RSA keys, (ii) encrypt a given message and (iii) decrypt the message without using any cryptographic library. Your program will generate the values of p unless the user provides them manually. Then the program will generate the keys (private and public). Then the program will allow the user to enter his/her message to be encrypted. Finally, the program will perform the decryption operation as well....
Write a GUI that allows the user to do the following: Create a new Patient Database...
Write a GUI that allows the user to do the following: Create a new Patient Database if it doesn’t exist yet by the click of a button. Create a second button that populates the database with the appropriate Asset table if it does not exist yet, and fill the table with at least 10 patients. Connect to the Patient Database and display all current patients in a List by default. You will have to create a Patient Class. This class...
Write a complete C program that read the text below and save the text in a...
Write a complete C program that read the text below and save the text in a new file "second.txt" with the same text written in all uppercase. "Beedle the Bard was an English wizard and author of wizarding fairytales. Beedle was born in Yorkshire, England. At some point in his life he wrote The Tales of Beedle the Bard . The only known image of Beedle is a woodcut that shows him with a "luxuriant" beard. Beedle wrote in ancient...
Write a program that will ask for the user to input a filename of a text...
Write a program that will ask for the user to input a filename of a text file that contains an unknown number of integers. And also an output filename to display results. You will read all of the integers from the input file, and store them in an array. (You may need to read all the values in the file once just to get the total count) Using this array you will find the max number, min number, average value,...
C# Programming Language Write a C# program ( Console or GUI ) that prompts the user...
C# Programming Language Write a C# program ( Console or GUI ) that prompts the user to enter the three examinations ( test 1, test 2, and test 3), homework, and final project grades then calculate and display the overall grade along with a message, using the selection structure (if/else). The message is based on the following criteria: “Excellent” if the overall grade is 90 or more. “Good” if the overall grade is between 80 and 90 ( not including...
Write a program that runs on SPIM that allows the user to enter the number of...
Write a program that runs on SPIM that allows the user to enter the number of hours, minutes and seconds and then prints out the total time in seconds. Name the source code file “seconds.asm
Write a program that runs on SPIM that allows the user to enter the number of...
Write a program that runs on SPIM that allows the user to enter the number of hours, minutes and seconds and then prints out the total time in seconds. Name the source code file “seconds.asm Explain step by step
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT