feat: texteditor
|
@ -0,0 +1,68 @@
|
|||
from tkinter import *
|
||||
|
||||
# GUI
|
||||
root = Tk()
|
||||
root.title("Chatbot")
|
||||
|
||||
BG_GRAY = "#ABB2B9"
|
||||
BG_COLOR = "#17202A"
|
||||
TEXT_COLOR = "#EAECEE"
|
||||
|
||||
FONT = "Helvetica 14"
|
||||
FONT_BOLD = "Helvetica 13 bold"
|
||||
|
||||
# Send function
|
||||
def send():
|
||||
send = "You -> " + e.get()
|
||||
txt.insert(END, "\n" + send)
|
||||
|
||||
user = e.get().lower()
|
||||
|
||||
if (user == "hello"):
|
||||
txt.insert(END, "\n" + "Bot -> Hi there, how can I help?")
|
||||
|
||||
elif (user == "hi" or user == "hii" or user == "hiiii"):
|
||||
txt.insert(END, "\n" + "Bot -> Hi there, what can I do for you?")
|
||||
|
||||
elif (user == "how are you"):
|
||||
txt.insert(END, "\n" + "Bot -> fine! and you")
|
||||
|
||||
elif (user == "fine" or user == "i am good" or user == "i am doing good"):
|
||||
txt.insert(END, "\n" + "Bot -> Great! how can I help you.")
|
||||
|
||||
elif (user == "thanks" or user == "thank you" or user == "now its my time"):
|
||||
txt.insert(END, "\n" + "Bot -> My pleasure !")
|
||||
|
||||
elif (user == "what do you sell" or user == "what kinds of items are there" or user == "have you something"):
|
||||
txt.insert(END, "\n" + "Bot -> We have coffee and tea")
|
||||
|
||||
elif (user == "tell me a joke" or user == "tell me something funny" or user == "crack a funny line"):
|
||||
txt.insert(
|
||||
END, "\n" + "Bot -> What did the buffalo say when his son left for college? Bison.! ")
|
||||
|
||||
elif (user == "goodbye" or user == "see you later" or user == "see yaa"):
|
||||
txt.insert(END, "\n" + "Bot -> Have a nice day!")
|
||||
|
||||
else:
|
||||
txt.insert(END, "\n" + "Bot -> Sorry! I didn't understand that")
|
||||
|
||||
e.delete(0, END)
|
||||
|
||||
|
||||
lable1 = Label(root, bg=BG_COLOR, fg=TEXT_COLOR, text="Welcome", font=FONT_BOLD, pady=10, width=20, height=1).grid(
|
||||
row=0)
|
||||
|
||||
txt = Text(root, bg=BG_COLOR, fg=TEXT_COLOR, font=FONT, width=60)
|
||||
txt.grid(row=1, column=0, columnspan=2)
|
||||
|
||||
scrollbar = Scrollbar(txt)
|
||||
scrollbar.place(relheight=1, relx=0.974)
|
||||
|
||||
e = Entry(root, bg="#2C3E50", fg=TEXT_COLOR, font=FONT, width=55)
|
||||
e.grid(row=2, column=0)
|
||||
|
||||
send = Button(root, text="Send", font=FONT_BOLD, bg=BG_GRAY,
|
||||
command=send).grid(row=2, column=1)
|
||||
|
||||
root.mainloop()
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
import tkinter as tk
|
||||
from ttkbootstrap import Style, Button, Label, Entry, Frame, Scrollbar, Text
|
||||
|
||||
# 创建主窗口
|
||||
root = tk.Tk()
|
||||
style = Style(theme='litera')
|
||||
|
||||
# 设置窗口大小
|
||||
root.geometry('400x600')
|
||||
|
||||
# 创建聊天窗口的框架
|
||||
chat_frame = Frame(root)
|
||||
chat_frame.pack(fill='both', expand=True)
|
||||
|
||||
# 创建文本框用于显示聊天内容
|
||||
chat_text = Text(chat_frame, wrap='word', height=15, yscrollcommand=Scrollbar.set)
|
||||
chat_text.pack(side='left', fill='both', expand=True)
|
||||
|
||||
# 创建滚动条
|
||||
scrollbar = Scrollbar(chat_frame, orient='vertical', command=chat_text.yview)
|
||||
scrollbar.pack(side='right', fill='y')
|
||||
|
||||
# 创建输入框
|
||||
input_frame = Frame(root)
|
||||
input_frame.pack(fill='x')
|
||||
|
||||
# 创建输入文本框
|
||||
input_text = Entry(input_frame, width=50)
|
||||
input_text.pack(side='left', fill='x', expand=True)
|
||||
|
||||
# 创建发送按钮
|
||||
send_button = Button(input_frame, text='Send', style='primary.TButton')
|
||||
send_button.pack(side='right')
|
||||
|
||||
# 运行主循环
|
||||
root.mainloop()
|
After Width: | Height: | Size: 196 B |
After Width: | Height: | Size: 164 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 185 B |
After Width: | Height: | Size: 554 B |
After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 828 B |
After Width: | Height: | Size: 820 B |
After Width: | Height: | Size: 523 B |
After Width: | Height: | Size: 730 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 324 B |
After Width: | Height: | Size: 221 B |
After Width: | Height: | Size: 467 B |
After Width: | Height: | Size: 498 B |
After Width: | Height: | Size: 358 B |
After Width: | Height: | Size: 588 B |
After Width: | Height: | Size: 459 B |
After Width: | Height: | Size: 482 B |
|
@ -0,0 +1,668 @@
|
|||
#!/usr/bin/python2
|
||||
|
||||
import os
|
||||
from tkinter import *
|
||||
from tkinter import filedialog, simpledialog, messagebox, colorchooser, font
|
||||
from tkinter import ttk
|
||||
|
||||
from PIL import Image, ImageTk
|
||||
|
||||
|
||||
# creating the root of the window.
|
||||
master = Tk()
|
||||
master.title("Untitled* - Script Editor")
|
||||
master.geometry("600x550")
|
||||
|
||||
# setting resizable window
|
||||
master.resizable(True, True)
|
||||
master.minsize(600, 550) # minimimum size possible
|
||||
|
||||
# --------------- METHODS ---------------- #
|
||||
|
||||
# MAIN MENU METHODS
|
||||
|
||||
file_name = "" # Current file name.
|
||||
current_font_family = "Liberation Mono"
|
||||
current_font_size = 12
|
||||
fontColor ='#000000'
|
||||
fontBackground= '#FFFFFF'
|
||||
|
||||
def make_tag():
|
||||
current_tags = text.tag_names()
|
||||
if "bold" in current_tags:
|
||||
weight = "bold"
|
||||
else:
|
||||
weight = "normal"
|
||||
|
||||
if "italic" in current_tags:
|
||||
slant = "italic"
|
||||
else:
|
||||
slant = "roman"
|
||||
|
||||
if "underline" in current_tags:
|
||||
underline = 1
|
||||
else:
|
||||
underline = 0
|
||||
|
||||
if "overstrike" in current_tags:
|
||||
overstrike = 1
|
||||
else:
|
||||
overstrike = 0
|
||||
|
||||
big_font = font.Font(text, text.cget("font"))
|
||||
big_font.configure(slant= slant , weight= weight , underline= underline , overstrike= overstrike , family= current_font_family , size= current_font_size )
|
||||
text.tag_config("BigTag", font=big_font , foreground= fontColor , background= fontBackground)
|
||||
if "BigTag" in current_tags:
|
||||
text.tag_remove("BigTag" , 1.0 , END)
|
||||
text.tag_add("BigTag" , 1.0 , END)
|
||||
|
||||
def new(event=None):
|
||||
file_name = ""
|
||||
ans = messagebox.askquestion(title="Save File" , message="Would you like to save this file")
|
||||
if ans is True:
|
||||
save()
|
||||
delete_all()
|
||||
|
||||
def open_file(event=None):
|
||||
new()
|
||||
file = filedialog.askopenfile()
|
||||
global file_name
|
||||
file_name = file.name
|
||||
text.insert(INSERT , file.read())
|
||||
|
||||
def save(event=None):
|
||||
global file_name
|
||||
if file_name == "":
|
||||
path = filedialog.asksaveasfilename()
|
||||
file_name = path
|
||||
master.title(file_name + " - Script Editor")
|
||||
write = open(file_name, mode='w')
|
||||
write.write(text.get("1.0", END))
|
||||
|
||||
def save_as(event=None):
|
||||
if file_name == "":
|
||||
save()
|
||||
return "break"
|
||||
f = filedialog.asksaveasfile(mode='w')
|
||||
if f is None:
|
||||
return
|
||||
text2save = str(text.get(1.0, END))
|
||||
f.write(text2save)
|
||||
f.close()
|
||||
|
||||
new_name = "" # Used for renaming the file
|
||||
|
||||
def rename(event=None):
|
||||
global file_name
|
||||
if file_name == "":
|
||||
open_file()
|
||||
|
||||
arr = file_name.split('/')
|
||||
path = ""
|
||||
for i in range(0 , len(arr) -1):
|
||||
path = path + arr[i] + '/'
|
||||
|
||||
new_name = simpledialog.askstring("Rename", "Enter new name")
|
||||
os.rename(file_name , str(path) + str(new_name))
|
||||
file_name = str(path) + str(new_name)
|
||||
master.title(file_name + " - Script Editor")
|
||||
|
||||
|
||||
def close(event=None):
|
||||
save()
|
||||
master.quit()
|
||||
|
||||
# EDIT MENU METHODS
|
||||
|
||||
def cut(event=None):
|
||||
# first clear the previous text on the clipboard.
|
||||
master.clipboard_clear()
|
||||
text.clipboard_append(string=text.selection_get())
|
||||
#index of the first and yhe last letter of our selection.
|
||||
text.delete(index1=SEL_FIRST, index2=SEL_LAST)
|
||||
|
||||
|
||||
def copy(event=None):
|
||||
# first clear the previous text on the clipboard.
|
||||
print(text.index(SEL_FIRST))
|
||||
print(text.index(SEL_LAST))
|
||||
master.clipboard_clear()
|
||||
text.clipboard_append(string=text.selection_get())
|
||||
|
||||
def paste(event=None):
|
||||
# get gives everyting from the clipboard and paste it on the current cursor position
|
||||
# it does'nt removes it from the clipboard.
|
||||
text.insert(INSERT, master.clipboard_get())
|
||||
|
||||
def delete():
|
||||
text.delete(index1=SEL_FIRST, index2=SEL_LAST)
|
||||
|
||||
def undo():
|
||||
text.edit_undo()
|
||||
|
||||
def redo():
|
||||
text.edit_redo()
|
||||
|
||||
def select_all(event=None):
|
||||
text.tag_add(SEL, "1.0", END)
|
||||
|
||||
def delete_all():
|
||||
text.delete(1.0, END)
|
||||
|
||||
# TOOLS MENU METHODS
|
||||
|
||||
def change_color():
|
||||
color = colorchooser.askcolor(initialcolor='#ff0000')
|
||||
color_name = color[1]
|
||||
global fontColor
|
||||
fontColor = color_name
|
||||
current_tags = text.tag_names()
|
||||
if "font_color_change" in current_tags:
|
||||
# first char is bold, so unbold the range
|
||||
text.tag_delete("font_color_change", 1.0 , END)
|
||||
else:
|
||||
# first char is normal, so bold the whole selection
|
||||
text.tag_add("font_color_change", 1.0 , END)
|
||||
make_tag()
|
||||
|
||||
# Adding Search Functionality
|
||||
|
||||
def check(value):
|
||||
text.tag_remove('found', '1.0', END)
|
||||
text.tag_config('found', foreground='red')
|
||||
list_of_words = value.split(' ')
|
||||
for word in list_of_words:
|
||||
idx = '1.0'
|
||||
while idx:
|
||||
idx = text.search(word, idx, nocase=1, stopindex=END)
|
||||
if idx:
|
||||
lastidx = '%s+%dc' % (idx, len(word))
|
||||
text.tag_add('found', idx, lastidx)
|
||||
print(lastidx)
|
||||
idx = lastidx
|
||||
|
||||
# implementation of search dialog box - calling the check method to search and find_text_cancel_button to close it
|
||||
def find_text(event=None):
|
||||
search_toplevel = Toplevel(master)
|
||||
search_toplevel.title('Find Text')
|
||||
search_toplevel.transient(master)
|
||||
search_toplevel.resizable(False, False)
|
||||
Label(search_toplevel, text="Find All:").grid(row=0, column=0, sticky='e')
|
||||
search_entry_widget = Entry(search_toplevel, width=25)
|
||||
search_entry_widget.grid(row=0, column=1, padx=2, pady=2, sticky='we')
|
||||
search_entry_widget.focus_set()
|
||||
Button(search_toplevel, text="Ok", underline=0, command=lambda: check( search_entry_widget.get())).grid(row=0, column=2, sticky='e' +'w', padx=2, pady=5)
|
||||
Button(search_toplevel, text="Cancel", underline=0, command=lambda: find_text_cancel_button(search_toplevel)).grid(row=0, column=4, sticky='e' +'w', padx=2, pady=2)
|
||||
|
||||
# remove search tags and destroys the search box
|
||||
def find_text_cancel_button(search_toplevel):
|
||||
text.tag_remove('found', '1.0', END)
|
||||
search_toplevel.destroy()
|
||||
return "break"
|
||||
|
||||
# FORMAT BAR METHODS
|
||||
|
||||
def bold(event=None):
|
||||
current_tags = text.tag_names()
|
||||
if "bold" in current_tags:
|
||||
# first char is bold, so unbold the range
|
||||
text.tag_delete("bold", 1.0, END)
|
||||
else:
|
||||
# first char is normal, so bold the whole selection
|
||||
text.tag_add("bold", 1.0, END)
|
||||
make_tag()
|
||||
|
||||
def italic(event=None):
|
||||
current_tags = text.tag_names()
|
||||
if "italic" in current_tags:
|
||||
text.tag_add("roman", 1.0, END)
|
||||
text.tag_delete("italic", 1.0, END)
|
||||
else:
|
||||
text.tag_add("italic", 1.0, END)
|
||||
make_tag()
|
||||
|
||||
def underline(event=None):
|
||||
current_tags = text.tag_names()
|
||||
if "underline" in current_tags:
|
||||
text.tag_delete("underline", 1.0, END)
|
||||
else:
|
||||
text.tag_add("underline", 1.0, END)
|
||||
make_tag()
|
||||
|
||||
def strike():
|
||||
current_tags = text.tag_names()
|
||||
if "overstrike" in current_tags:
|
||||
text.tag_delete("overstrike" ,"1.0", END)
|
||||
else:
|
||||
text.tag_add("overstrike" , 1.0, END)
|
||||
make_tag()
|
||||
|
||||
def highlight():
|
||||
color = colorchooser.askcolor(initialcolor='white')
|
||||
color_rgb = color[1]
|
||||
global fontBackground
|
||||
fontBackground= color_rgb
|
||||
current_tags = text.tag_names()
|
||||
if "background_color_change" in current_tags:
|
||||
text.tag_delete("background_color_change", "1.0", END)
|
||||
else:
|
||||
text.tag_add("background_color_change", "1.0", END)
|
||||
make_tag()
|
||||
|
||||
|
||||
# To make align functions work properly
|
||||
def remove_align_tags():
|
||||
all_tags = text.tag_names(index=None)
|
||||
if "center" in all_tags:
|
||||
text.tag_remove("center", "1.0", END)
|
||||
if "left" in all_tags:
|
||||
text.tag_remove("left", "1.0", END)
|
||||
if "right" in all_tags:
|
||||
text.tag_remove("right", "1.0", END)
|
||||
|
||||
# align_center
|
||||
def align_center(event=None):
|
||||
remove_align_tags()
|
||||
text.tag_configure("center", justify='center')
|
||||
text.tag_add("center", 1.0, "end")
|
||||
|
||||
# align_justify
|
||||
def align_justify():
|
||||
remove_align_tags()
|
||||
|
||||
# align_left
|
||||
def align_left(event=None):
|
||||
remove_align_tags()
|
||||
text.tag_configure("left", justify='left')
|
||||
text.tag_add("left", 1.0, "end")
|
||||
|
||||
# align_right
|
||||
def align_right(event=None):
|
||||
remove_align_tags()
|
||||
text.tag_configure("right", justify='right')
|
||||
text.tag_add("right", 1.0, "end")
|
||||
|
||||
# Font and size change functions - BINDED WITH THE COMBOBOX SELECTION
|
||||
# change font and size are methods binded with combobox, calling fontit and sizeit
|
||||
# called when <<combobox>> event is called
|
||||
|
||||
def change_font(event):
|
||||
f = all_fonts.get()
|
||||
global current_font_family
|
||||
current_font_family = f
|
||||
make_tag()
|
||||
|
||||
def change_size(event):
|
||||
sz = int(all_size.get())
|
||||
global current_font_size
|
||||
current_font_size = sz
|
||||
make_tag()
|
||||
|
||||
# ------------- CREATING - MENUBAR AND ITS MENUS, TOOLS BAR, FORMAT BAR, STATUS BAR AND TEXT AREA -----------#
|
||||
|
||||
# TOOLBAR
|
||||
toolbar = Frame(master, pady=2)
|
||||
|
||||
# TOOLBAR BUTTONS
|
||||
# new
|
||||
new_button = Button(name="toolbar_b2", borderwidth=1, command=new, width=20, height=20)
|
||||
photo_new = Image.open("icons/new.png")
|
||||
photo_new = photo_new.resize((18, 18), Image.LANCZOS)
|
||||
image_new = ImageTk.PhotoImage(photo_new)
|
||||
new_button.config(image=image_new)
|
||||
new_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
# save
|
||||
save_button = Button(name="toolbar_b1", borderwidth=1, command=save, width=20, height=20)
|
||||
photo_save = Image.open("icons/save.png")
|
||||
photo_save = photo_save.resize((18, 18), Image.LANCZOS)
|
||||
image_save = ImageTk.PhotoImage(photo_save)
|
||||
save_button.config(image=image_save)
|
||||
save_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
#open
|
||||
open_button = Button(name="toolbar_b3", borderwidth=1, command=open_file, width=20, height=20)
|
||||
photo_open = Image.open("icons/open.png")
|
||||
photo_open = photo_open.resize((18, 18), Image.LANCZOS)
|
||||
image_open = ImageTk.PhotoImage(photo_open)
|
||||
open_button.config(image=image_open)
|
||||
open_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
# copy
|
||||
copy_button = Button(name="toolbar_b4", borderwidth=1, command=copy, width=20, height=20)
|
||||
photo_copy = Image.open("icons/copy.png")
|
||||
photo_copy = photo_copy.resize((18, 18), Image.LANCZOS)
|
||||
image_copy = ImageTk.PhotoImage(photo_copy)
|
||||
copy_button.config(image=image_copy)
|
||||
copy_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
#cut
|
||||
cut_button = Button(name="toolbar_b5", borderwidth=1, command=cut, width=20, height=20)
|
||||
photo_cut = Image.open("icons/cut.png")
|
||||
photo_cut = photo_cut.resize((18, 18), Image.LANCZOS)
|
||||
image_cut = ImageTk.PhotoImage(photo_cut)
|
||||
cut_button.config(image=image_cut)
|
||||
cut_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
# paste
|
||||
paste_button = Button(name="toolbar_b6", borderwidth=1, command=paste, width=20, height=20)
|
||||
photo_paste = Image.open("icons/paste.png")
|
||||
photo_paste = photo_paste.resize((18, 18), Image.LANCZOS)
|
||||
image_paste = ImageTk.PhotoImage(photo_paste)
|
||||
paste_button.config(image=image_paste)
|
||||
paste_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
# redo
|
||||
redo_button = Button(name="toolbar_b7", borderwidth=1, command=redo, width=20, height=20)
|
||||
photo_redo = Image.open("icons/redo.png")
|
||||
photo_redo = photo_redo.resize((18, 18), Image.LANCZOS)
|
||||
image_redo = ImageTk.PhotoImage(photo_redo)
|
||||
redo_button.config(image=image_redo)
|
||||
redo_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
# undo
|
||||
undo_button = Button(name="toolbar_b8", borderwidth=1, command=undo, width=20, height=20)
|
||||
photo_undo = Image.open("icons/undo.png")
|
||||
photo_undo = photo_undo.resize((18, 18), Image.LANCZOS)
|
||||
image_undo = ImageTk.PhotoImage(photo_undo)
|
||||
undo_button.config(image=image_undo)
|
||||
undo_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
# find
|
||||
find_button = Button(name="toolbar_b9", borderwidth=1, command=find_text, width=20, height=20)
|
||||
photo_find = Image.open("icons/find.png")
|
||||
photo_find = photo_find.resize((18, 18), Image.LANCZOS)
|
||||
image_find = ImageTk.PhotoImage(photo_find)
|
||||
find_button.config(image=image_find)
|
||||
find_button.pack(in_=toolbar, side="left", padx=4, pady=4)
|
||||
|
||||
# FORMATTING BAR
|
||||
formattingbar = Frame(master, padx=2, pady=2)
|
||||
|
||||
# FORMATTING BAR COMBOBOX - FOR FONT AND SIZE
|
||||
# font combobox
|
||||
all_fonts = StringVar()
|
||||
font_menu = ttk.Combobox(formattingbar, textvariable=all_fonts , state = "readonly")
|
||||
font_menu.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
font_menu['values'] = ( 'Courier', 'Helvetica', 'Liberation Mono', 'OpenSymbol', 'Century Schoolbook L', 'DejaVu Sans Mono', 'Ubuntu Condensed', 'Ubuntu Mono', 'Lohit Punjabi', 'Mukti Narrow', 'Meera', 'Symbola', 'Abyssinica SIL')
|
||||
font_menu.bind('<<ComboboxSelected>>',change_font)
|
||||
font_menu.current(2)
|
||||
|
||||
# size combobox
|
||||
all_size = StringVar()
|
||||
size_menu = ttk.Combobox(formattingbar, textvariable=all_size , state='readonly', width=5)
|
||||
size_menu.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
size_menu['values'] = ('10', '12', '14', '16', '18', '20', '22', '24', '26', '28', '30')
|
||||
size_menu.bind('<<ComboboxSelected>>',change_size)
|
||||
size_menu.current(1)
|
||||
|
||||
# FORMATBAR BUTTONS
|
||||
#bold
|
||||
bold_button = Button(name="formatbar_b1", borderwidth=1, command=bold, width=20, height=20, pady=10, padx=10)
|
||||
photo_bold = Image.open("icons/bold.png")
|
||||
photo_bold = photo_bold.resize((18, 18), Image.LANCZOS)
|
||||
image_bold = ImageTk.PhotoImage(photo_bold)
|
||||
bold_button.config(image=image_bold)
|
||||
bold_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# italic
|
||||
italic_button = Button(name="formatbar_b2", borderwidth=1, command=italic, width=20, height=20)
|
||||
photo_italic = Image.open("icons/italic.png")
|
||||
photo_italic = photo_italic.resize((18, 18), Image.LANCZOS)
|
||||
image_italic = ImageTk.PhotoImage(photo_italic)
|
||||
italic_button.config(image=image_italic)
|
||||
italic_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# underline
|
||||
underline_button = Button(name="formatbar_b3", borderwidth=1, command=underline, width=20, height=20)
|
||||
photo_underline = Image.open("icons/underline.png")
|
||||
photo_underline = photo_underline.resize((18, 18), Image.LANCZOS)
|
||||
image_underline = ImageTk.PhotoImage(photo_underline)
|
||||
underline_button.config(image=image_underline)
|
||||
underline_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# strike
|
||||
strike_button = Button(name="formatbar_b4", borderwidth=1, command=strike, width=20, height=20)
|
||||
photo_strike = Image.open("icons/strike.png")
|
||||
photo_strike = photo_strike.resize((18, 18), Image.LANCZOS)
|
||||
image_strike = ImageTk.PhotoImage(photo_strike)
|
||||
strike_button.config(image=image_strike)
|
||||
strike_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# font_color
|
||||
font_color_button = Button(name="formatbar_b5", borderwidth=1, command=change_color, width=20, height=20)
|
||||
photo_font_color = Image.open("icons/font-color.png")
|
||||
photo_font_color = photo_font_color.resize((18, 18), Image.LANCZOS)
|
||||
image_font_color = ImageTk.PhotoImage(photo_font_color)
|
||||
font_color_button.config(image=image_font_color)
|
||||
font_color_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# highlight
|
||||
highlight_button = Button(name="formatbar_b6", borderwidth=1, command=highlight, width=20, height=20)
|
||||
photo_highlight = Image.open("icons/highlight.png")
|
||||
photo_highlight = photo_highlight.resize((18, 18), Image.LANCZOS)
|
||||
image_highlight = ImageTk.PhotoImage(photo_highlight)
|
||||
highlight_button.config(image=image_highlight)
|
||||
highlight_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# align_center
|
||||
align_center_button = Button(name="formatbar_b7", borderwidth=1, command=align_center, width=20, height=20)
|
||||
photo_align_center = Image.open("icons/align-center.png")
|
||||
photo_align_center = photo_align_center.resize((18, 18), Image.LANCZOS)
|
||||
image_align_center = ImageTk.PhotoImage(photo_align_center)
|
||||
align_center_button.config(image=image_align_center)
|
||||
align_center_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# align_justify
|
||||
align_justify_button = Button(name="formatbar_b8", borderwidth=1, command=align_justify, width=20, height=20)
|
||||
photo_align_justify = Image.open("icons/align-justify.png")
|
||||
photo_align_justify = photo_align_justify.resize((18, 18), Image.LANCZOS)
|
||||
image_align_justify = ImageTk.PhotoImage(photo_align_justify)
|
||||
align_justify_button.config(image=image_align_justify)
|
||||
align_justify_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# align_left
|
||||
align_left_button = Button(name="formatbar_b9", borderwidth=1, command=align_left, width=20, height=20)
|
||||
photo_align_left = Image.open("icons/align-left.png")
|
||||
photo_align_left = photo_align_left.resize((18, 18), Image.LANCZOS)
|
||||
image_align_left = ImageTk.PhotoImage(photo_align_left)
|
||||
align_left_button.config(image=image_align_left)
|
||||
align_left_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# align_right
|
||||
align_right_button = Button(name="formatbar_b10", borderwidth=1, command=align_right, width=20, height=20)
|
||||
photo_align_right = Image.open("icons/align-right.png")
|
||||
photo_align_right = photo_align_right.resize((18, 18), Image.LANCZOS)
|
||||
image_align_right = ImageTk.PhotoImage(photo_align_right)
|
||||
align_right_button.config(image=image_align_right)
|
||||
align_right_button.pack(in_=formattingbar, side="left", padx=4, pady=4)
|
||||
|
||||
# STATUS BAR
|
||||
status = Label(master, text="", bd=1, relief=SUNKEN, anchor=W)
|
||||
|
||||
# CREATING TEXT AREA - FIRST CREATED A FRAME AND THEN APPLIED TEXT OBJECT TO IT.
|
||||
text_frame = Frame(master, borderwidth=1, relief="sunken")
|
||||
text = Text(wrap="word", font=("Liberation Mono", 12), background="white", borderwidth=0, highlightthickness=0 , undo= True)
|
||||
text.pack(in_=text_frame, side="left", fill="both", expand=True) # pack text object.
|
||||
|
||||
# PACK TOOLBAR, FORMATBAR, STATUSBAR AND TEXT FRAME.
|
||||
toolbar.pack(side="top", fill="x")
|
||||
formattingbar.pack(side="top", fill="x")
|
||||
status.pack(side="bottom", fill="x")
|
||||
text_frame.pack(side="bottom", fill="both", expand=True)
|
||||
text.focus_set()
|
||||
|
||||
# MENUBAR CREATION
|
||||
|
||||
menu = Menu(master)
|
||||
master.config(menu=menu)
|
||||
|
||||
# File menu.
|
||||
file_menu = Menu(menu)
|
||||
menu.add_cascade(label="File", menu=file_menu, underline=0)
|
||||
|
||||
file_menu.add_command(label="New", command=new, compound='left', image=image_new, accelerator='Ctrl+N', underline=0) # command passed is here the method defined above.
|
||||
file_menu.add_command(label="Open", command=open_file, compound='left', image=image_open, accelerator='Ctrl+O', underline=0)
|
||||
file_menu.add_separator()
|
||||
file_menu.add_command(label="Save", command=save, compound='left', image=image_save, accelerator='Ctrl+S', underline=0)
|
||||
file_menu.add_command(label="Save As", command=save_as, accelerator='Ctrl+Shift+S', underline=1)
|
||||
file_menu.add_command(label="Rename", command=rename, accelerator='Ctrl+Shift+R', underline=0)
|
||||
file_menu.add_separator()
|
||||
file_menu.add_command(label="Close", command=close, accelerator='Alt+F4', underline=0)
|
||||
|
||||
# Edit Menu.
|
||||
edit_menu = Menu(menu)
|
||||
menu.add_cascade(label="Edit", menu=edit_menu, underline=0)
|
||||
|
||||
edit_menu.add_command(label="Undo", command=undo, compound='left', image=image_undo, accelerator='Ctrl+Z', underline=0)
|
||||
edit_menu.add_command(label="Redo", command=redo, compound='left', image=image_redo, accelerator='Ctrl+Y', underline=0)
|
||||
edit_menu.add_separator()
|
||||
edit_menu.add_command(label="Cut", command=cut, compound='left', image=image_cut, accelerator='Ctrl+X', underline=0)
|
||||
edit_menu.add_command(label="Copy", command=copy, compound='left', image=image_copy, accelerator='Ctrl+C', underline=1)
|
||||
edit_menu.add_command(label="Paste", command=paste, compound='left', image=image_paste, accelerator='Ctrl+P', underline=0)
|
||||
edit_menu.add_command(label="Delete", command=delete, underline=0)
|
||||
edit_menu.add_separator()
|
||||
edit_menu.add_command(label="Select All", command=select_all, accelerator='Ctrl+A', underline=0)
|
||||
edit_menu.add_command(label="Clear All", command=delete_all, underline=6)
|
||||
|
||||
#Tool Menu
|
||||
tool_menu = Menu(menu)
|
||||
menu.add_cascade(label="Tools", menu=tool_menu, underline=0)
|
||||
|
||||
tool_menu.add_command(label="Change Color", command=change_color)
|
||||
tool_menu.add_command(label="Search", command=find_text, compound='left', image=image_find, accelerator='Ctrl+F')
|
||||
|
||||
# Help Menu
|
||||
def about(event=None):
|
||||
messagebox.showinfo("About", "Text Editor\nCreated in Python using Tkinter\nCopyright with Amandeep and Harmanpreet, 2017")
|
||||
|
||||
help_menu = Menu(menu)
|
||||
menu.add_cascade(label="Help", menu=help_menu, underline=0)
|
||||
help_menu.add_command(label="About", command=about, accelerator='Ctrl+H', underline=0)
|
||||
|
||||
# ----- BINDING ALL KEYBOARD SHORTCUTS ---------- #
|
||||
text.bind('<Control-n>', new)
|
||||
text.bind('<Control-N>', new)
|
||||
|
||||
text.bind('<Control-o>', open_file)
|
||||
text.bind('<Control-O>', open_file)
|
||||
|
||||
text.bind('<Control-s>', save)
|
||||
text.bind('<Control-S>', save)
|
||||
|
||||
text.bind('<Control-Shift-s>', save_as)
|
||||
text.bind('<Control-Shift-S>', save_as)
|
||||
|
||||
text.bind('<Control-r>', rename)
|
||||
text.bind('<Control-R>', rename)
|
||||
|
||||
text.bind('<Alt-F4>', close)
|
||||
text.bind('<Alt-F4>', close)
|
||||
|
||||
text.bind('<Control-x>', cut)
|
||||
text.bind('<Control-X>', cut)
|
||||
|
||||
text.bind('<Control-c>', copy)
|
||||
text.bind('<Control-C>', copy)
|
||||
|
||||
text.bind('<Control-p>', paste)
|
||||
text.bind('<Control-P>', paste)
|
||||
|
||||
text.bind('<Control-a>', select_all)
|
||||
text.bind('<Control-A>', select_all)
|
||||
|
||||
text.bind('<Control-h>', about)
|
||||
text.bind('<Control-H>', about)
|
||||
|
||||
text.bind('<Control-f>', find_text)
|
||||
text.bind('<Control-F>', find_text)
|
||||
|
||||
text.bind('<Control-Shift-i>', italic)
|
||||
text.bind('<Control-Shift-I>', italic)
|
||||
|
||||
text.bind('<Control-b>', bold)
|
||||
text.bind('<Control-B>', bold)
|
||||
|
||||
text.bind('<Control-u>', underline)
|
||||
text.bind('<Control-U>', underline)
|
||||
|
||||
text.bind('<Control-Shift-l>', align_left)
|
||||
text.bind('<Control-Shift-L>', align_left)
|
||||
|
||||
text.bind('<Control-Shift-r>', align_right)
|
||||
text.bind('<Control-Shift-R>', align_right)
|
||||
|
||||
text.bind('<Control-Shift-c>', align_center)
|
||||
text.bind('<Control-Shift-C>', align_center)
|
||||
|
||||
# ---------- SETTING EVENTS FOR THE STATUS BAR -------------- #
|
||||
def on_enter(event, str):
|
||||
status.configure(text=str)
|
||||
|
||||
|
||||
def on_leave(event):
|
||||
status.configure(text="")
|
||||
|
||||
new_button.bind("<Enter>", lambda event , str="New, Command - Ctrl+N":on_enter(event , str))
|
||||
new_button.bind("<Leave>", on_leave)
|
||||
|
||||
save_button.bind("<Enter>", lambda event , str="Save, Command - Ctrl+S":on_enter(event , str))
|
||||
save_button.bind("<Leave>", on_leave)
|
||||
|
||||
open_button.bind("<Enter>", lambda event , str="Open, Command - Ctrl+O":on_enter(event , str))
|
||||
open_button.bind("<Leave>", on_leave)
|
||||
|
||||
copy_button.bind("<Enter>", lambda event , str="Copy, Command - Ctrl+C":on_enter(event , str))
|
||||
copy_button.bind("<Leave>", on_leave)
|
||||
|
||||
cut_button.bind("<Enter>", lambda event , str="Cut, Command - Ctrl+X":on_enter(event , str))
|
||||
cut_button.bind("<Leave>", on_leave)
|
||||
|
||||
paste_button.bind("<Enter>", lambda event , str="Paste, Command - Ctrl+P":on_enter(event , str))
|
||||
paste_button.bind("<Leave>", on_leave)
|
||||
|
||||
undo_button.bind("<Enter>", lambda event , str="Undo, Command - Ctrl+Z":on_enter(event , str))
|
||||
undo_button.bind("<Leave>", on_leave)
|
||||
|
||||
redo_button.bind("<Enter>", lambda event , str="Redo, Command - Ctrl+Y":on_enter(event , str))
|
||||
redo_button.bind("<Leave>", on_leave)
|
||||
|
||||
find_button.bind("<Enter>", lambda event , str="Find, Command - Ctrl+F":on_enter(event , str))
|
||||
find_button.bind("<Leave>", on_leave)
|
||||
|
||||
bold_button.bind("<Enter>", lambda event , str="Bold, Command - Ctrl+B":on_enter(event , str))
|
||||
bold_button.bind("<Leave>", on_leave)
|
||||
|
||||
italic_button.bind("<Enter>", lambda event , str="Italic, Command - Ctrl+Shift+I":on_enter(event , str))
|
||||
italic_button.bind("<Leave>", on_leave)
|
||||
|
||||
underline_button.bind("<Enter>", lambda event , str="Underline, Command - Ctrl+U":on_enter(event , str))
|
||||
underline_button.bind("<Leave>", on_leave)
|
||||
|
||||
align_justify_button.bind("<Enter>", lambda event , str="Justify":on_enter(event , str))
|
||||
align_justify_button.bind("<Leave>", on_leave)
|
||||
|
||||
align_left_button.bind("<Enter>", lambda event , str="Align Left, Command - Control-Shift-L":on_enter(event , str))
|
||||
align_left_button.bind("<Leave>", on_leave)
|
||||
|
||||
align_right_button.bind("<Enter>", lambda event , str="Align Right, Command - Control-Shift-R":on_enter(event , str))
|
||||
align_right_button.bind("<Leave>", on_leave)
|
||||
|
||||
align_center_button.bind("<Enter>", lambda event , str="Align Center, Command - Control-Shift-C":on_enter(event , str))
|
||||
align_center_button.bind("<Leave>", on_leave)
|
||||
|
||||
strike_button.bind("<Enter>", lambda event , str="Strike":on_enter(event , str))
|
||||
strike_button.bind("<Leave>", on_leave)
|
||||
|
||||
font_color_button.bind("<Enter>", lambda event , str="Font Color":on_enter(event , str))
|
||||
font_color_button.bind("<Leave>", on_leave)
|
||||
|
||||
highlight_button.bind("<Enter>", lambda event , str="Highlight":on_enter(event , str))
|
||||
highlight_button.bind("<Leave>", on_leave)
|
||||
|
||||
strike_button.bind("<Enter>", lambda event , str="Strike":on_enter(event , str))
|
||||
strike_button.bind("<Leave>", on_leave)
|
||||
|
||||
# MAINLOOP OF THE PROGRAM
|
||||
master.mainloop()
|
||||
|