Jaison Jacob

Last updated: 12 October 2021

Notepad with Malayalam keyboard V3.0

Vantage Point / September 2020

A simple notepad made using Python 3.8 with additional onscreen Malayalam keyboard support, ideal for Mac machines where you don't find much input methods specifically made for Malayalam language. Also included in this blog: how to run this application without the need for installing a source code editor — directly from the terminal

Keyboard Layout

Malayalam Notepad V3.0

What's new in version 3.0 ?

  1. A file manager to open/save/save as notes in your desktop
  2. A contextual menu to support with multiple combinations of the same alphabet

How to use the Notepad

Step #1:

Copy the following code in a TextEdit file and save it with .py extension

from tkinter import *
from tkinter import filedialog #this is imported to load a dialog letting user select and open a file from your local drive
from tkinter import font
#import ttk for notebook
from tkinter import ttk

root = Tk()
root.title('Malayalam Keypad V1.0')
root.geometry("1200x800")
root.resizable(0,0)


global open_status_name #from Save File function
open_status_name = False #from Save File function

#functions that define what happens when each button is clicked 


# f1 \  row a
def button_space_clicked():
    my_text.insert(END, " ")

def button_ക_clicked():
    my_text.insert(END, "ക")

def button_enter_clicked():
    my_text.insert(END, "\n")

def button_ച_clicked():
    my_text.insert(END, "ച")

def button_ട_clicked():
    my_text.insert(END, "ട")

def button_ത_clicked():
    my_text.insert(END, "ത")

def button_പ_clicked():
    my_text.insert(END, "പ")

def button_യ_clicked():
    my_text.insert(END, "യ")
    
def button_ഷ_clicked():
    my_text.insert(END, "ഷ")

def button_ൺ_clicked():
    my_text.insert(END, "ൺ")

def button_റ_clicked():
    my_text.insert(END, "റ")


# f1 \  row b

def button_അ_clicked():
    my_text.insert(END, "അ")

def button_ഉ_clicked():
    my_text.insert(END, "ഉ")

def button_ഒ_clicked():
    my_text.insert(END, "ഒ")

def button_അം_clicked():
    my_text.insert(END, "അം")

def button_ഖ_clicked():
    my_text.insert(END, "ഖ")

def button_ഛ_clicked():
    my_text.insert(END, "ഛ")

def button_ഠ_clicked():
    my_text.insert(END, "ഠ")

def button_ഥ_clicked():
    my_text.insert(END, "ഥ")

def button_ഫ_clicked():
    my_text.insert(END, "ഫ")

def button_ര_clicked():
    my_text.insert(END, "ര")

def button_സ_clicked():
    my_text.insert(END, "സ")

def button_ൻ_clicked():
    my_text.insert(END, "ൻ")

def button_question_clicked():
    my_text.insert(END, "?")

# f1 \  row c

def button_ആ_clicked():
    my_text.insert(END, "ആ")

def button_ഊ_clicked():
    my_text.insert(END, "ഊ")

def button_ഓ_clicked():
    my_text.insert(END, "ഓ")

def button_അഃ_clicked():
    my_text.insert(END, "അഃ")
#
def button_ഗ_clicked():
    my_text.insert(END, "ഗ")

def button_ജ_clicked():
    my_text.insert(END, "ജ")

def button_ഡ_clicked():
    my_text.insert(END, "ഡ")

def button_ദ_clicked():
    my_text.insert(END, "ദ")

def button_ബ_clicked():
    my_text.insert(END, "ബ")

def button_ല_clicked():
    my_text.insert(END, "ല")

def button_ഹ_clicked():
    my_text.insert(END, "ഹ")

def button_ർ_clicked():
    my_text.insert(END, "ർ")

def button_fullstop_clicked():
    my_text.insert(END, ".")


# f1 \  row d

def button_ഇ_clicked():
    my_text.insert(END, "ഇ")

def button_എ_clicked():
    my_text.insert(END, "എ")

def button_ഐ_clicked():
    my_text.insert(END, "ഐ")

def button_ഋ_clicked():
    my_text.insert(END, "ഋ")

def button_ഘ_clicked():
    my_text.insert(END, "ഘ")

def button_ഝ_clicked():
    my_text.insert(END, "ഝ")

def button_ഢ_clicked():
    my_text.insert(END, "ഢ")

def button_ധ_clicked():
    my_text.insert(END, "ധ")

def button_ഭ_clicked():
    my_text.insert(END, "ഭ")

def button_വ_clicked():
    my_text.insert(END, "വ")

def button_ള_clicked():
    my_text.insert(END, "ള")

def button_ൽ_clicked():
    my_text.insert(END, "ൽ")

def button_comma_clicked():
    my_text.insert(END, ",")

# f1 \  row e

def button_ഈ_clicked():
    my_text.insert(END, "ഈ")

def button_ഏ_clicked():
    my_text.insert(END, "ഏ")

def button_ഔ_clicked():
    my_text.insert(END, "ഔ")

def button_്_clicked():
    my_text.insert(END, "്")

def button_ങ_clicked():
    my_text.insert(END, "ങ")

def button_ഞ_clicked():
    my_text.insert(END, "ഞ")

def button_ണ_clicked():
    my_text.insert(END, "ണ")

def button_ന_clicked():
    my_text.insert(END, "ന")

def button_മ_clicked():
    my_text.insert(END, "മ")

def button_ശ_clicked():
    my_text.insert(END, "ശ")

def button_ഴ_clicked():
    my_text.insert(END, "ഴ")

def button_ൾ_clicked():
    my_text.insert(END, "ൾ")

def button_quote_clicked():
    my_text.insert(END, "'")

#f2 \ row b (vowels)
def button_ു_clicked():
    my_text.insert(END, "ു")

def button_ൊ_clicked():
    my_text.insert(END, "ൊ")

def button_ം_clicked():
    my_text.insert(END, "ം")

#f2 \ row c (vowels)
def button_ാ_clicked():
    my_text.insert(END, "ാ")

def button_ൂ_clicked():
    my_text.insert(END, "ൂ")

def button_ോ_clicked():
    my_text.insert(END, "ോ")

def button_ഃ_clicked():
    my_text.insert(END, " ഃ")

#f2 \ row d (vowels)

def button_ി_clicked():
    my_text.insert(END, "ി")

def button_െ_clicked():
    my_text.insert(END, "െ")

def button_ൈ_clicked():
    my_text.insert(END, "ൈ")

def button_ൃ_clicked():
    my_text.insert(END, "ൃ")

#f2 \ row e (vowels)

def button_ീ_clicked():
    my_text.insert(END, "ീ")

def button_േ_clicked():
    my_text.insert(END, "േ")

def button_ൌ_clicked():
    my_text.insert(END, "ൌ")

def new_file(): #take all the contents of file and delete it
    my_text.delete("1.0", END) #delete from first line (1.0) to the last line (END)
    root.title('New_File_Malayalam Keypad V1.0') #update the title of window
    Status_bar.config(text = "    New File opened") #update the status bar

    global open_status_name #declaring again to prevent some old values stored to interrupt the save and Save us process
    open_status_name = False #declaring again to prevent some old values stored to interrupt the save and Save us process

def open_file(): #open a file thats located in your folder structure
    my_text.delete("1.0", END) #delete from first line (1.0) to the last line (END)
    text_file = filedialog.askopenfilename(initialdir="", title ="Open File", filetypes=(("Text Files", "*.txt"), ("HTML Files", "*.html"), ("Python Files", "*.py"), ("All Files", "*.*") )) #open the window and grab a file name
    
    #for saving purposes //// jump to the //  def save_file():
    if text_file: #if a file name exist
            global open_status_name #know the status of the opened file; now we have to make open_status_name global, so that we could access it from anywhere 
            open_status_name = text_file


    name = text_file #add all the contents of text_file to 'name'
    Status_bar.config(text = f'    {name} ') #update the status bar with the f'string' name // this is to fetch the file name
    name = name.replace("/Users/i321150/Desktop/", "")
    root.title(f'{name}_Malayalam Keypad V1.0') #update the title of window with the f{name} fetched from the filename
    
    

    #open the file 
    text_file = open(text_file, 'r') #r means open the file only for reading
    stuff = text_file.read()

    my_text.insert(END, stuff) #add file to textbox
    text_file.close() #close the opened file

def save_as_file():
    text_file = filedialog.asksaveasfilename(defaultextension = ".*", initialdir ="", title = "Save File", filetypes=(("Text Files", "*.txt"), ("HTML Files", "*.html"), ("Python Files", "*.py"), ("All Files", "*.*")) )
    if text_file: #if user chooses a .txt extension
        #update the statusbar
        name = text_file 
        Status_bar.config(text = f'    Saved: {name} ') #update the status bar with the f'string' name // this is to fetch the file name
        name = name.replace("/Users/i321150/Desktop/", "") #remove the local address from name
        root.title(f'{name}_Malayalam Keypad V1.0') #update the title of window with the f{name} fetched from the filename

        #save the file
        text_file = open(text_file, 'w') #open the text file, this time we'll write instead of 'r'
        text_file.write(my_text.get(1.0, END)) #whatever you 'get' from the text box (my_text), from first line to the last line, then write them into text_file
        text_file.close() #close the file as a best practice

def save_file():
    global open_status_name
    if open_status_name: #if exists // Have we already opened the file with this filename?
        #save the file
        text_file = open(open_status_name, 'w') #open the text file, this time we'll write instead of 'r'
        text_file.write(my_text.get(1.0, END)) #whatever you 'get' from the text box (my_text), from first line to the last line, then write them into text_file
        text_file.close() #close the file as a best practice

        Status_bar.config(text = f'    Saved: {open_status_name} ') #update the status bar with the f'string' name // this is to fetch the file name
    else: #if the file doesnt exist, 'save it as' a new file
        save_as_file()

#///////////////////////////Cut,Copy,Paste//////////////////////////////////////////////////////////////////////////

def cut_text(e):
    global selected
    if e:
        selected = root.clipboard_get()
    else:
        if my_text.selection_get(): #if somethings highlighted, do something with it:
            selected = my_text.selection_get() #this selection.get() will isolate the highlighted or selected text and..
            my_text.delete("sel.first", "sel.last") #..delete selected text from the textbox, first highlighted + last selected and everything in between 

            root.clipboard_clear() #clear whatever is saved already there in the clipboard..
            root.clipboard_append(selected) #.. and copy whats the latest in "selected"
            Status_bar.config(text = "    Cut from the selected location")

def copy_text(e):
    global selected
    if e: #a check to see if we've used keyboard shortcuts to trigger the coppy
        selected = root.clipboard_get() # when you copy something, copy it to the clipboard


        
    if my_text.selection_get(): #if somethings highlighted, then do this with it:
        selected = my_text.selection_get() #copy is same as cut, only that it doesnt delete the content from the textbox
        
        root.clipboard_clear() #clear whatever is saved already there in the clipboard..
        root.clipboard_append(selected) #.. and copy whats the latest in "selected"
        Status_bar.config(text = "    Copied to Clipboard")
        

def paste_text(e):
    global selected
    if e: #check to see if the keyboard shortcuts are bing used
        selected = root.clipboard_get() #copy whatever is there in clipboard to selected

    else: #else
        if selected: #something is 'selected', then do all these stuff:
            position = my_text.index(INSERT) #grab where the cursor is sittingin text box and assign it to position
            my_text.insert(position, selected) #paste whatever was'selected' in this position
            Status_bar.config(text = "    Pasted to the new location")

#/////////////////////////////////////////////////////////////////  

def button_backspace_clicked():   #http://effbot.org/tkinterbook/text.htm How to perform a backspace event in Text widget
    my_text.delete("%s-1c" % INSERT, INSERT)
    Status_bar.config(text = "    Deleted the last character") #update the status bar


#create main frame
my_frame = Frame(root)
my_frame.pack()

#create Menu / New, Open, Save
my_menu = Menu(root)
root.config(menu = my_menu)

#add a file to the menu
file_menu = Menu(my_menu)
my_menu.add_cascade(label = "File", menu = file_menu )
file_menu.add_command(label = "New", command = new_file)
file_menu.add_command(label = "Open", command = open_file )
file_menu.add_command(label = "Save", command = save_file )
file_menu.add_command(label = "Save As", command = save_as_file )
file_menu.add_command(label = "Exit", command = root.quit)



#create rows
row1 = Frame(root, bg="#ffffff")
row1.pack(expand=True, fill = "both")


#Statusbar at the end of the screen
Status_bar = Label(row1, text = "    I'm ready, Jaison!", anchor=W, bg = "#000000", fg = "#b7cfa5")
Status_bar.pack(fill = X, side = BOTTOM, ipady =5)

#create scrollbar first
text_scroll =Scrollbar(my_frame)
text_scroll.pack(side = RIGHT, expand = True, fill=Y)

#textfield to enter text
my_text = Text(my_frame, width = 1200, font =("Verdana", 26), undo = True, yscrollcommand = text_scroll.set, bg ="#1e1e1e", fg = "#ffffff", height = 14, padx =20,pady = 20, )
my_text.pack(side= RIGHT, expand = True, fill ="both")

#configure the scrollbar for myframe
text_scroll.config(command = my_text.yview)

#making a tabstyle notebook which goes in row 1

style = ttk.Style(row1) #always remember to 'import ttk' in the begining, else there will be a lot of errors
style.configure('lefttab.TNotebook', tabposition  = 'WS')

notebook = ttk.Notebook(row1, style = 'lefttab.TNotebook')
f1 = Frame(notebook, bg = 'white', width = 1200, height = 400)
notebook.add(f1, text = 'Regular')
f2 = Frame(notebook, bg = 'white', width = 1200, height = 400)
notebook.add(f2, text = 'SHIFT')

notebook.pack(expand = True, fill="both")



#GUI starts here::

#now fill f1 tab with buttonrows
btnrow1a = Frame(f1, bg = "#000000")
btnrow1a.pack(expand = True, fill ="both")

btnrow1b = Frame(f1, bg = "#808080")
btnrow1b.pack(expand = True, fill ="both")

btnrow1c = Frame(f1, bg = "#000000")
btnrow1c.pack(expand = True, fill ="both")

btnrow1d = Frame(f1, bg = "#808080")
btnrow1d.pack(expand = True, fill ="both")

btnrow1e = Frame(f1, bg = "#000000")
btnrow1e.pack(expand = True, fill ="both")

#now fill f2 tab with buttonrows
btnrow2a = Frame(f2, bg = "#000000")
btnrow2a.pack(expand = True, fill ="both")

btnrow2b = Frame(f2, bg = "#808080")
btnrow2b.pack(expand = True, fill ="both")

btnrow2c = Frame(f2, bg = "#000000")
btnrow2c.pack(expand = True, fill ="both")

btnrow2d = Frame(f2, bg = "#808080")
btnrow2d.pack(expand = True, fill ="both")

btnrow2e = Frame(f2, bg = "#000000")
btnrow2e.pack(expand = True, fill ="both")


#fill f1> buttonrow 1a with buttons 

btn2=Button(btnrow1a, text ="Undo", font = ("Verdana", 18), command = my_text.edit_undo) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow1a, text ="Redo", font = ("Verdana", 18), command = my_text.edit_redo) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow1a, text ="Space", font = ("Verdana", 18), command = button_space_clicked) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow1a, text ="Enter", font = ("Verdana", 18), command = button_enter_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow1a, text ="ക", font = ("Verdana", 22), command =button_ക_clicked) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow1a, text ="ച", font = ("Verdana", 22), command =button_ച_clicked) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow1a, text ="ട", font = ("Verdana", 22), command =button_ട_clicked) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow1a, text ="ത", font = ("Verdana", 22), command =button_ത_clicked) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow1a, text ="പ", font = ("Verdana", 22), command =button_പ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow1a, text ="യ", font = ("Verdana", 22), command =button_യ_clicked) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow1a, text ="ഷ", font = ("Verdana", 22), command =button_ഷ_clicked) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow1a, text ="ൺ", font = ("Verdana", 22), command =button_ൺ_clicked) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow1a, text ="റ", font = ("Verdana", 22), command =button_റ_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1b with buttons 
btn1=Button(btnrow1b, text ="Cut", font = ("Verdana", 18), command =lambda: cut_text(False)) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow1b, text ="അ", font = ("Verdana", 22), command =button_അ_clicked) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow1b, text ="ഉ", font = ("Verdana", 22), command =button_ഉ_clicked) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow1b, text ="ഒ", font = ("Verdana", 22), command =button_ഒ_clicked) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow1b, text ="അം", font = ("Verdana", 22), command =button_അം_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow1b, text ="ഖ", font = ("Verdana", 22), command =button_ഖ_clicked) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow1b, text ="ഛ", font = ("Verdana", 22), command =button_ഛ_clicked) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow1b, text ="ഠ", font = ("Verdana", 22), command =button_ഠ_clicked) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow1b, text ="ഥ", font = ("Verdana", 22), command =button_ഥ_clicked) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow1b, text ="ഫ", font = ("Verdana", 22), command =button_ഫ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow1b, text ="ര", font = ("Verdana", 22), command =button_ര_clicked) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow1b, text ="സ", font = ("Verdana", 22), command =button_സ_clicked) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow1b, text ="ൻ", font = ("Verdana", 22), command =button_ൻ_clicked) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow1b, text ="?", font = ("Verdana", 18), command =button_question_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1c with buttons 
btn1=Button(btnrow1c, text ="Copy", font = ("Verdana", 18), command =lambda: copy_text(False)) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow1c, text ="ആ", font = ("Verdana", 22), command =button_ആ_clicked) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow1c, text ="ഊ", font = ("Verdana", 22), command =button_ഊ_clicked) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow1c, text ="ഓ", font = ("Verdana", 22), command =button_ഓ_clicked) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow1c, text ="അഃ", font = ("Verdana", 22), command =button_അഃ_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow1c, text ="ഗ", font = ("Verdana", 22), command =button_ഗ_clicked) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow1c, text ="ജ", font = ("Verdana", 22), command =button_ജ_clicked) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow1c, text ="ഡ", font = ("Verdana", 22), command =button_ഡ_clicked) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow1c, text ="ദ", font = ("Verdana", 22), command =button_ദ_clicked) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow1c, text ="ബ", font = ("Verdana", 22), command =button_ബ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow1c, text ="ല", font = ("Verdana", 22), command =button_ല_clicked) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow1c, text ="ഹ", font = ("Verdana", 22), command =button_ഹ_clicked) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow1c, text ="ർ", font = ("Verdana", 22), command =button_ർ_clicked) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow1c, text =".", font = ("Verdana", 18), command =button_fullstop_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1d with buttons 
btn1=Button(btnrow1d, text ="Paste", font = ("Verdana", 18), command =lambda: paste_text(False)) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow1d, text ="ഇ", font = ("Verdana", 22), command =button_ഇ_clicked) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow1d, text ="എ", font = ("Verdana", 22), command =button_എ_clicked) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow1d, text ="ഐ", font = ("Verdana", 22), command =button_ഐ_clicked) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow1d, text ="ഋ", font = ("Verdana", 22), command =button_ഋ_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow1d, text ="ഘ", font = ("Verdana", 22), command =button_ഘ_clicked) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow1d, text ="ഝ", font = ("Verdana", 22), command =button_ഝ_clicked) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow1d, text ="ഢ", font = ("Verdana", 22), command =button_ഢ_clicked) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow1d, text ="ധ", font = ("Verdana", 22), command =button_ധ_clicked) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow1d, text ="ഭ", font = ("Verdana", 22), command =button_ഭ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow1d, text ="വ", font = ("Verdana", 22), command =button_വ_clicked) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow1d, text ="ള", font = ("Verdana", 22), command =button_ള_clicked) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow1d, text ="ൽ", font = ("Verdana", 22), command =button_ൽ_clicked) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow1d, text =",", font = ("Verdana", 18), command =button_comma_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1e with buttons 
btn1=Button(btnrow1e, text ="Delete", font = ("Verdana", 18), command =button_backspace_clicked) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow1e, text ="ഈ", font = ("Verdana", 22), command =button_ഈ_clicked) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow1e, text ="ഏ", font = ("Verdana", 22), command =button_ഏ_clicked) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow1e, text ="ഔ", font = ("Verdana", 22), command =button_ഔ_clicked) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow1e, text ="്", font = ("Verdana", 22), command =button_്_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow1e, text ="ങ", font = ("Verdana", 22), command =button_ങ_clicked) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow1e, text ="ഞ", font = ("Verdana", 22), command =button_ഞ_clicked) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow1e, text ="ണ", font = ("Verdana", 22), command =button_ണ_clicked) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow1e, text ="ന", font = ("Verdana", 22), command =button_ന_clicked) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow1e, text ="മ", font = ("Verdana", 22), command =button_മ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow1e, text ="ശ", font = ("Verdana", 22), command =button_ശ_clicked) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow1e, text ="ഴ", font = ("Verdana", 22), command =button_ഴ_clicked) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow1e, text ="ൾ", font = ("Verdana", 22), command =button_ൾ_clicked) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow1e, text ="'", font = ("Verdana", 18), command =button_quote_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")




#fill f2> buttonrow 2a with buttons 

btn2=Button(btnrow2a, text ="Undo", font = ("Verdana", 18), command = my_text.edit_undo) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow2a, text ="Redo", font = ("Verdana", 18), command = my_text.edit_redo) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow2a, text ="Space", font = ("Verdana", 18), command =button_space_clicked) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow2a, text ="Enter", font = ("Verdana", 18), command =button_enter_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow2a, text ="ക", font = ("Verdana", 22), command =button_ക_clicked ) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow2a, text ="ച", font = ("Verdana", 22), command =button_ച_clicked ) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow2a, text ="ട", font = ("Verdana", 22), command =button_ട_clicked ) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow2a, text ="ത", font = ("Verdana", 22), command =button_ത_clicked ) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow2a, text ="പ", font = ("Verdana", 22), command =button_പ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow2a, text ="യ", font = ("Verdana", 22), command =button_യ_clicked ) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow2a, text ="ഷ", font = ("Verdana", 22), command =button_ഷ_clicked ) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow2a, text ="ൺ", font = ("Verdana", 22), command =button_ൺ_clicked) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow2a, text ="റ", font = ("Verdana", 22), command =button_റ_clicked ) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1b with buttons 
btn1=Button(btnrow2b, text ="Cut", font = ("Verdana", 18), command =lambda: cut_text(False)) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow2b, text ="അ", font = ("Verdana", 22), command =button_അ_clicked ) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow2b, text =" ു", font = ("Verdana", 22), command =button_ു_clicked ) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow2b, text =" ൊ", font = ("Verdana", 22), command =button_ൊ_clicked ) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow2b, text =" ം", font = ("Verdana", 22), command =button_ം_clicked ) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow2b, text ="ഖ", font = ("Verdana", 22), command =button_ഖ_clicked ) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow2b, text ="ഛ", font = ("Verdana", 22), command =button_ഛ_clicked ) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow2b, text ="ഠ", font = ("Verdana", 22), command =button_ഠ_clicked ) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow2b, text ="ഥ", font = ("Verdana", 22), command =button_ഥ_clicked ) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow2b, text ="ഫ", font = ("Verdana", 22), command =button_ഫ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow2b, text ="ര", font = ("Verdana", 22), command =button_ര_clicked) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow2b, text ="സ", font = ("Verdana", 22), command =button_സ_clicked ) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow2b, text ="ൻ", font = ("Verdana", 22), command =button_ൻ_clicked ) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow2b, text ="?", font = ("Verdana", 18), command =button_question_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1c with buttons 
btn1=Button(btnrow2c, text ="Copy", font = ("Verdana", 18), command =lambda: copy_text(False)) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow2c, text =" ാ", font = ("Verdana", 22), command =button_ാ_clicked ) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow2c, text =" ൂ", font = ("Verdana", 22), command =button_ൂ_clicked ) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow2c, text =" ോ", font = ("Verdana", 22), command =button_ോ_clicked ) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow2c, text =" ഃ", font = ("Verdana", 22), command =button_ഃ_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow2c, text ="ഗ", font = ("Verdana", 22), command =button_ഗ_clicked) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow2c, text ="ജ", font = ("Verdana", 22), command =button_ജ_clicked) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow2c, text ="ഡ", font = ("Verdana", 22), command =button_ഡ_clicked) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow2c, text ="ദ", font = ("Verdana", 22), command =button_ദ_clicked ) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow2c, text ="ബ", font = ("Verdana", 22), command =button_ബ_clicked ) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow2c, text ="ല", font = ("Verdana", 22), command =button_ല_clicked ) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow2c, text ="ഹ", font = ("Verdana", 22), command =button_ഹ_clicked ) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow2c, text ="ർ", font = ("Verdana", 22), command =button_ർ_clicked ) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow2c, text =".", font = ("Verdana", 18), command =button_fullstop_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1d with buttons 
btn1=Button(btnrow2d, text ="Paste", font = ("Verdana", 18), command =lambda: paste_text(False)) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow2d, text =" ി", font = ("Verdana", 22), command =button_ി_clicked) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow2d, text =" െ", font = ("Verdana", 22), command =button_െ_clicked) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow2d, text =" ൈ", font = ("Verdana", 22), command =button_ൈ_clicked) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow2d, text =" ൃ", font = ("Verdana", 22), command =button_ൃ_clicked) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow2d, text ="ഘ", font = ("Verdana", 22), command =button_ഘ_clicked ) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow2d, text ="ഝ", font = ("Verdana", 22), command =button_ഝ_clicked ) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow2d, text ="ഢ", font = ("Verdana", 22), command =button_ഢ_clicked ) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow2d, text ="ധ", font = ("Verdana", 22), command =button_ധ_clicked ) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow2d, text ="ഭ", font = ("Verdana", 22), command =button_ഭ_clicked ) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow2d, text ="വ", font = ("Verdana", 22), command =button_വ_clicked ) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow2d, text ="ള", font = ("Verdana", 22), command =button_ള_clicked ) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow2d, text ="ൽ", font = ("Verdana", 22), command =button_ൽ_clicked) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow2d, text =",", font = ("Verdana", 18), command =button_comma_clicked) 
btn14.pack(side=LEFT, expand=True, fill="both")

#fill f1> buttonrow 1e with buttons 
btn1=Button(btnrow2e, text ="Delete", font = ("Verdana", 18), command =button_backspace_clicked) 
btn1.pack(side=LEFT, expand=True, fill="both")

btn2=Button(btnrow2e, text =" ീ", font = ("Verdana", 22), command =button_ീ_clicked ) 
btn2.pack(side=LEFT, expand=True, fill="both")

btn3=Button(btnrow2e, text =" േ", font = ("Verdana", 22), command =button_േ_clicked ) 
btn3.pack(side=LEFT, expand=True, fill="both")

btn4=Button(btnrow2e, text =" ൌ", font = ("Verdana", 22), command =button_ൌ_clicked ) 
btn4.pack(side=LEFT, expand=True, fill="both")

btn5=Button(btnrow2e, text ="്", font = ("Verdana", 22), command =button_്_clicked ) 
btn5.pack(side=LEFT, expand=True, fill="both")

btn6=Button(btnrow2e, text ="ങ", font = ("Verdana", 22), command =button_ങ_clicked ) 
btn6.pack(side=LEFT, expand=True, fill="both")

btn7=Button(btnrow2e, text ="ഞ", font = ("Verdana", 22), command =button_ഞ_clicked) 
btn7.pack(side=LEFT, expand=True, fill="both")

btn8=Button(btnrow2e, text ="ണ", font = ("Verdana", 22), command =button_ണ_clicked ) 
btn8.pack(side=LEFT, expand=True, fill="both")

btn9=Button(btnrow2e, text ="ന", font = ("Verdana", 22), command =button_ന_clicked ) 
btn9.pack(side=LEFT, expand=True, fill="both")

btn10=Button(btnrow2e, text ="മ", font = ("Verdana", 22), command =button_മ_clicked) 
btn10.pack(side=LEFT, expand=True, fill="both")

btn11=Button(btnrow2e, text ="ശ", font = ("Verdana", 22), command =button_ശ_clicked ) 
btn11.pack(side=LEFT, expand=True, fill="both")

btn12=Button(btnrow2e, text ="ഴ", font = ("Verdana", 22), command =button_ഴ_clicked ) 
btn12.pack(side=LEFT, expand=True, fill="both")

btn13=Button(btnrow2e, text ="ൾ", font = ("Verdana", 22), command =button_ൾ_clicked ) 
btn13.pack(side=LEFT, expand=True, fill="both")

btn14=Button(btnrow2e, text ="'", font = ("Verdana", 18), command =button_quote_clicked ) 
btn14.pack(side=LEFT, expand=True, fill="both")



#////// making the cut copy paste compliant with the shortcuts from windows keyboard and to fix copy to clipboard
root.bind('<Control-Key-x>', cut_text)
root.bind('<Control-Key-c>', copy_text)
root.bind('<Control-Key-x>', paste_text)
#////// making the cut copy paste compliant with the shortcuts from Mac keyboard and to fix copy to clipboard
root.bind('<Command-Key-x>', cut_text)
root.bind('<Command-Key-c>', copy_text)
root.bind('<Command-Key-x>', paste_text)

root.mainloop()
Step #2:

Open Documents and create a new folder "Python" and save it as "Notepad" with .py extension inside the folder

Create folder
Step #3:

Open terminal in your Mac and enter the following commands in sequence

(base) <device>:~ <username>$ cd Documents/Python
(base) <device>:Python <username>$ python Notepad.py
Step #4:

The application opens up and you can now use the notepad to type in Malayalam! Cheers !

Here's what I think about this :

Leave a Reply

Your email address will not be published. Required fields are marked *

Namaskāram and
How are you doing?

Hi,
How can I help you today?

About Jaison

Last updated: May 22, 2019



Jaison Jacob is an Indian Human Computer Interaction Designer, Author Inventor and a User Experience Design Specialist at SAP Labs India. Prior to his current role, he was a Senior Designer at Samsung Research Institute, Bangalore. Samsung Galaxy S6 was the first major product release with elements of his design influence.

Career

User Experience Design Specialist
SAP Labs India
August 2015 - Present

Senior Designer
Samsung Research Institute Bangalore,
August 2014 - August 2015

Interaction Designer
Technische Universität Darmstadt
May 2013 - June 2013

Web Developer
Tech Ergonomics
May 2011 - January 2012

Specialties

NN/g Certification ID: 1047328
UX Certified - UX Management Specialty, Nielsen Norman Group

Research Methods
Contextual enquiry, affinity mapping, identifying problems, concept generation, prototyping and usability testing

Tools
Pen and paper, Adobe XD, Axure, Figma

Toolkits
Design Thinking, Design led development - SAP Fiori, Participatory design

Education

Master of Design, Interaction Design
IIT Bombay
2012 - 2014

Bachelor of Engineering, Computer Science
Anna University
2006 - 2010

Hi,
How can I help you today?

    Here's my message in less then 250 words

    Name*

    Email*

    Consultation

    Follow the steps to send your consultation request

    Consultation

    Follow the steps to send your consultation request

       

      Search

      Enter your keyword here

      Choose the content:

      Blog

      Blog / Vantage Point

      Blog / Vantage Point

      , Thanks for the information, I'll
      contact you soon

      Thanks Jaison
      ×