-
Notifications
You must be signed in to change notification settings - Fork 0
/
notepad.py
172 lines (123 loc) · 5.04 KB
/
notepad.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
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)
__thisScrollBar = Scrollbar(__thisTextArea)
__file = None
def __init__(self, **kwargs):
try:
self.__root.wm_iconbitmap("Notepad.ico")
except:
pass
try:
self.__thisWidth = kwargs["width"]
except KeyError:
pass
try:
self.__thisHeight = kwargs["height"]
except KeyError:
pass
# set window text
self.__root.title("Untitled -Notepad")
# center window
screenWidth = self.__root.winfo_screenwidth()
screenHeight = self.__root.winfo_screenheight()
# for left align
left = (screenWidth / 2) - (self.__thisWidth / 2)
# for top 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 text area resizable
self.__root.grid_rowconfigure(0, weight=1)
self.__root.grid_columnconfigure(0, weight=1)
# add control (widgets)
self.__thisTextArea.grid(sticky=N + E + S + W)
# to open a new file
self.__thisFileMenu.add_command(label="New", command=self.__newFile)
# to open a existing file
self.__thisFileMenu.add_command(label="Open", command=self.__openFile)
# to save a 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 cut
self.__thisEditMenu.add_command(label="Cut", command=self.__cut)
# to give a feature copy
self.__thisEditMenu.add_command(label="Copy", command=self.__copy)
# to give a feature paste
self.__thisEditMenu.add_command(label="Paste", command=self.__paste)
# to give feautres to editing menu
self.__thisMenuBar.add_cascade(label="Edit", menu=self.__thisEditMenu)
# to create feature description of 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 adjysct automatically to 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 ", "SSS")
def __openFile(self):
self.__file = askopenfilename(defaultextension=".txt ", filetypes=[
("All Files", "*.*"), ("Text Documents", "*.txt")])
if self.__file == "":
# no file present
self.__file = None
else:
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:
self.__file = asksaveasfilename(initialfile='Untitled.txt', defaultextension=".txt ", filetypes=[
("All Files", " *.*"), ("Text Documents", "*.txt")])
if self.__file == "":
self.__file = None
else:
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()
notepad = Notepad(width=600, height=400)
notepad.run()