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