Skip to main content

Notepad in Python Tkinter




from tkinter import *
from tkinter.filedialog import askopenfilename, asksaveasfilename
import os
import tkinter.messagebox as tmsg

def newfile():
    global file
    ak.title("Untitled - Notepad")
    file =None
    txt.delete(1.0,END)

def openfile():
    global file
    file = askopenfilename(defaultextension=".txt"
                           , filetypes=[("All Files","*.*"),
                                       ("Text Documents","*.txt")])
    if file == "":
        file = None
    else:
        ak.title(os.path.basename(file)+" - Notepad")
        txt.delete(1.0,END)
        f = open(file,"r")
        txt.insert(1.0,f.read())
        f.close()

def savefile():
    global file
    if file == None:
        file = asksaveasfilename(initialfile='Untitled.txt',defaultextension=".txt"
                           , filetypes=[("All Files","*.*"),
                                       ("Text Documents","*.txt")])
        if file =="":
            file = None
        else:
            f = open(file, "w")
            f.write(txt.get(1.0,END))
            f.close()
            ak.title(os.path.basename(file)+" - Notepad")
            print("File saved")
    else:
        f = open(file, "w")
        f.write(txt.get(1.0,END))
        f.close()

def cut():
    txt.event_generate(("<<Cut>>"))

def copy():
    txt.event_generate(("<<Copy>>"))
   

def paste():
    txt.event_generate(("<<Paste>>"))




def fonts():
    fon = Tk()
    fon.geometry("300x300")
    fon.title("Font Family")
    l = Listbox(fon,font="lucida 10")
    l.pack(side=LEFT,anchor="nw",padx=30,pady=30)
    l.insert(END,"1.   Lucida")
    l.insert(END,"2.   System")
    l.insert(END,"3.   Courier")
    l.insert(END,"4.   Cursive")
    l.insert(END,"5.   Terminal")
    l.insert(END,"6.   Roman")
    l.insert(END,"7.   Rockwell")
    l.insert(END,"8.   Perpetua")
    l.insert(END,"9.   Script")
    l.insert(END,"10.   Berlin Sans FB")
         
    Button(fon,text="Style",command=save2).pack()
   
    def save():
        for item in l.curselection():
            if item==1:
                txt.config(font=(f"Lucida"))
               
            elif item==2:
                txt.config(font=("System"))
            elif item==3:
                txt.config(font=("Courier"))
            elif item==4:
                txt.config(font=("Cursive"))
            elif item==5:
                txt.config(font=("Terminal"))
            elif item==6:
                txt.config(font=("Roman"))
            elif item==7:
                txt.config(font=("Rockwell"))
            elif item==8:
                txt.config(font=("Perpetua"))
            elif item==9:
                txt.config(font=("Script"))
            elif item==10:
                txt.config(font=("Berlin Sans FB"))
           
   
    Button(fon,text="Size",command=save,padx=20,pady=20,font="lucida 15").pack(side=LEFT)
   
def tellus():
    tmsg.showinfo("Info","This is Notepad version 1.0\n Which is developed by AK")
   
   
       
def feedback():
    v = tmsg.askquestion("Was your experience Good?","Was your experience Good?")
    if v == "yes":
        msg = "Great. Rate us on Playstore please"
    else:
        def exit1():
            tmsg.showinfo("Accepted","Thanks for Feedback, We will try to solve this")
            q1.destroy()
        msg = "Tell us your problem"
        tmsg.showinfo("Experience",msg)
        q1 = Tk()
        q1.title("Tell Us")
        q1.geometry("300x300")
        q = StringVar()
        Label(q1,text="Tell Us Your Problem").pack(pady=20)
        query = Entry(q1,textvariable= q,font="lucida 10",width=50).pack()
        Button(q1,text="Submit",command=exit1).pack(padx=6,pady=6)
       
   


def wrap():
    pass

ak = Tk()
ak.geometry("600x600")
ak.title("Untitled  - Notepad")
ak.iconbitmap("mainicon.ico")


txt = Text(ak,font="20",padx=5,pady=5)
file =   None
txt.pack(expand=True, fill=BOTH)
# Menu bar
menubar = Menu(ak)

#file
filem = Menu(menubar,tearoff=0)

filem.add_command(label="New",command=newfile)
filem.add_command(label="Open",command=openfile)
filem.add_command(label="Save",command=savefile)
# filem.add_separator()  # this will separat from other
filem.add_command(label="Exit",command=quit)
menubar.add_cascade(label="File",menu=filem)



#edit
editm = Menu(menubar,tearoff=0)
editm.add_command(label="Cut",command=cut)
editm.add_command(label="Copy",command=copy)
editm.add_command(label="Past",command=paste)
menubar.add_cascade(label="Edit",menu=editm)

#Format
form = Menu(menubar,tearoff=0)
# form.add_command(label="Font",command=font)



form.add_command(label="Font",command=fonts)
form.add_command(label="Word Wrap",command=wrap)
menubar.add_cascade(label="Format",menu=form)
ak.config(menu=menubar)

#View
view = Menu(menubar, tearoff=0)
view.add_command(label="Zoom")
menubar.add_cascade(label="View",menu=view)
ak.config(menu=menubar)


#About
about = Menu(menubar, tearoff=0)
about.add_command(label="Send Feedback",command=feedback)
about.add_separator()
about.add_command(label="About Notepad",command=tellus)
menubar.add_cascade(label="Help",menu=about)
ak.config(menu=menubar)

# Scrollbar
scroll = Scrollbar(txt)
scroll.pack(side=RIGHT,fill=Y)
scroll.config(command=txt.yview)
txt.config(yscrollcommand=scroll.set)

ak.mainloop()

Comments